整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          link與@import的區別和分別對應的例子

          lt;link> 和 @import 是用于在網頁中引入外部資源(如樣式表)的兩種不同的方法。它們之間有以下幾個區別:

          下面是 <link> 和 @import 的區別以及相應的代碼例子:

          1. 加載順序和兼容性:

          • 使用 <link> 標簽加載外部樣式表:
          <link rel="stylesheet" href="styles.css">
          
          • 使用 @import 加載外部樣式表:
          @import url("styles.css");
          

          注意:@import 只能在 CSS 文件中使用。

          2. 權重和覆蓋規則:

          • 使用 <link> 標簽引入樣式表:
          <link rel="stylesheet" href="styles.css">
          
          • 使用 @import 引入樣式表:
          @import url("styles.css");
          

          3. 異步加載:

          • 使用 <link> 標簽異步加載樣式表:
          <link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
          <noscript><link rel="stylesheet" href="styles.css"></noscript>
          

          通過將 rel 屬性設置為 "preload",樣式表可以以異步方式加載,以提高頁面加載性能。<noscript> 標簽內的 <link> 標簽是為了在不支持 JavaScript 的情況下提供回退。

          • @import 沒有內置的異步加載機制,需要通過其他方式實現異步加載。

          綜上所述,<link> 標簽是更常見、更靈活且性能更好的方法,而 @import 仍然可以在某些特定情況下使用。

          SS代碼實現用戶跟蹤及反跟蹤方法

          去年,有一位開發者創建了一個網站,用于跟蹤和記錄用戶數據,包括點擊,鼠標移動,瀏覽器類型和操作系統。通過Web應用進行用戶跟蹤大家已經司空見慣,但是這個網站使用的方法卻有點"低端",低端的讓大都為之內心一顫,因為他的方法沒有用到動態語言,甚至也沒有用到JavaScript,只是純HTML和一行CSS。這打破長期以來大家認為了CSS改只能靜態樣式顯示的的思維。蟲蟲今天就來給大家解析的他的方法,并附上如何防止此類跟蹤的方法。

          跟蹤原理

          這個方法利用了CSS的兩個特性:將內容注入HTML元素的能力(操縱DOM),以及在用戶執行操作后更改樣式的能力(渲染頁面)。該網站的工作原理是使用content屬性在執行操作時設置URL。 URL調用一個PHP腳本,該腳本記錄有關操作的詳細信息,這些操作將作為URL參數傳遞。使用:: before和:: after CSS選擇器設置此URL可確保僅在執行操作時調用URL,而不是在首次加載頁面時調用URL。

          例如,以下CSS在每次單擊#link元素時調用URL:

          跟蹤腳本包含記錄事件時間和執行操作的代碼。它還可用于提取用戶的IP地址,用戶代理和其他識別信息。

          以下是這樣一個腳本的PHP示例:

          瀏覽器探測

          用戶可以設置瀏覽器的User-agent來欺騙服務器,但是該追蹤方法中使用@supports at-rule測試特定于瀏覽器的CSS屬性來規避它。例如,以下操作通過檢測-webkit-appearance可用,以及-ms-ime-align不可用,來檢測是否為Chrome瀏覽器:

          操作系統探測

          為了正確檢測用戶操作系統,在這個跟蹤中動用了字體檢測。例如,通過檢測瀏覽器是否支持Calibri字體系列,就可以判斷瀏覽器是不是在Windows中運行:

          方法也有個示例的頁面證明可以識別除了上述提到一些信,還有其他的數據,包括瀏覽器窗口的大小和方向,用戶是否點擊了鏈接,以及用戶將鼠標懸停在元素上的時間。

          下面是蟲蟲操作后跟蹤到的信息的展示頁面:

          反追蹤方法

          在瀏覽器中很難防止這種攻擊。可以借助一個跨站注入漏洞來完美實現信息竊取,還非常難于發現。如果想要完全避免這種攻擊,除非禁用CSS,但是這樣一來網站也就掛掉了。雖然無法完全杜絕攻擊,但是我們可以使用內容安全策略(CSP)增加其利用的難度。

          CSP是一組規則,用于確定瀏覽器可以執行和不執行的操作。 CSP通常用于防止跨瀏覽器加載不受信任的腳本導致的跨站點腳本(XSS)和其他攻擊。雖然通常與JavaScript文件一起使用,但CSP也可以應用于CSS樣式表。

          我們假設由第三方提供商托管的樣式表的網站,攻擊者危及樣式表并將用戶跟蹤添加到頁面上的鏈接如下:

          當用戶單擊該鏈接時,他們的瀏覽器會其他網站上的跟蹤腳本。由于該行為是通過瀏覽器完成的,因此網站所有者完全不知道該漏洞。內容安全策略通過設置允許的樣式以及來源網站,就可以避免調用非法來源的鏈接。

          禁用內聯樣式

          禁用內聯樣式是CSP提供的最大安全優勢之一。內聯樣式是直接在HTML文檔中聲明(或通過JavaScript設置)的樣式,而不是從樣式表中加載的樣式。內聯樣式,尤其是動態生成的樣式或用戶創建的樣式,非常難以調試和保護。所以CSP通常會阻止所有內聯樣式,并將那些經過特別批準的內容列入白名單。

          以下規則阻止所有內聯樣式以及外部托管的樣式表:

          Content-Security-Policy "style-src 'self';"
          

          使用哈希和隨機數驗證樣式

          如果阻止內聯樣式不能禁止,我們仍然可以使用哈希和隨機數確保CSS的完整性。

          在樣式表或內聯樣式上執行散列函數時,除非樣式更改,否則它應該始終返回相同的結果。這對于將某些內聯樣式和樣式表列入白名單非常有用,同時可以驗證樣式是否未被修改或篡改。

          Nonces則使用哈希類似的功能。但是加入了隨機數,為每個請求生成一個新的隨機數,使攻擊者更難以猜測其值。這避免了哈希的關鍵缺點:多個輸入可能生成相同的哈希。

          對外部樣式表進行驗證

          樣式表通常托管在第三方服務器上,例如CDN中,這會導致一個新的攻擊入口。如果CDN遭到入侵,怎么能阻止攻擊篡改托管的CSS呢?

          答案是SRI,可以使用資源完整性(SRI)解決此問題。

          SRI使用哈希來驗證腳本和樣式表的內容。計算每個文件的哈希并將其附加到HTML元素的完整性屬性。當瀏覽器下載腳本或樣式表時,它會計算其哈希值并將其與存儲在屬性中的值進行比較。如果匹配,才會加載腳本或樣式。

          雖然通過CSS跟蹤用戶的能力并不是什么新鮮事,但它確實需要我們對網絡上的隱私和安全性進行不同的思考。CSS是現代網絡的基本語言之一,禁用網站的CSS戶導致大部分網站無法使用。 Content-Security-Policy是防止XSS攻擊和CSS泄露的最佳方法。關注蟲蟲,瀏覽更多技術原創文章。

          端基礎,個人認為就是html + js + css。無論過程如何,無論你用的是less還是sass,無論你用的vue還是react,輸出的結果,只有html + js + css。

          此部分列舉,筆者覺得重點的知識點,如有遺漏,歡迎指出。

          1.語義化

          所謂,語義化的標簽,說明讓標簽有自己的含義。也是近十年。最典型的例子就是header,footer等,它可以讓你在沒有樣式的情況下,就大概能想到,他就是個頭部或者底部。他存在的意義,就是讓前端開發人員,在開發過程中,更容易去閱讀代碼,以及明白這些代碼的意義。

          它的好處是:1.能夠更好的展示內容結構 2.便于團隊的維護與開發 3.有利于SEO,爬蟲可以分析每個關鍵詞的權重。4.方便其他設備解析 (如屏幕閱讀器)

          2.SEO

          作為前端,你不得不知道的SEO,這涉及到公司的網站推廣。

          SEO,中文稱搜索引擎優化,一種利用搜索引擎的搜索規則來提高目前網站在有關搜索引擎內的自然排名的方式。他的實現原來分別為,頁面抓取,分析入庫,檢索排序。

          有興趣深入SEO優化的朋友:segmentfault.com/a/119000001…

          3.doctype

          前端經常在html頭部看到DOCTYPE的聲明,一般常位于文檔的第一行。那么他的作用是什么,可能對新的瀏覽器或者新的網站暫無什么影響,但是相對古老的瀏覽器或者是網站,可能會出現不同。因為瀏覽器有標準模式與兼容模式,差異相對比較大。

          標準模式的渲染方式和 JS 引擎的解析方式都是以該瀏覽器支持的最高標準運行。兼容模式中,頁面以寬松的向后兼容的方式顯示 ,模擬老式瀏覽器的行為以防止站點無法工作。

          而DOCTYPE的存在,就是為了聲明,該頁面使用標準模式。不聲明,可能一些舊的網站會出現兼容模式。

          4.link與@import

          link與import , 本質使用上,我們都是用它來引入css,但是他們有一定的區別。

          1. link是一種引入資源的標簽,import是引入css的方式。所以,import引入的只能是css,而link可以引入所有的資源,包括圖片,RSS等。
          2. 加載順序上也有一些差異。link引用的CSS會同時被加載。import引用的CSS會等到頁面全部被下載完再加載。
          3. 兼容性的差別。link無任何兼容問題,import兼容IE5以上。(當然,IE5估計也找不到了)
          4. 動態引入樣式 link可以后期引入樣式,而import是不可以后期引入的,只能初始化頁面之前引入。
          5. 復用率的問題 import可以復用之前的css文件,而link只能一次引用一個文件。當然,import復用文件時,在瀏覽器實際上是加載了多個文件,會有多個請求。而每一個link只是一個http請求。

          5.async與defer

          首先這兩個東西為什么而存在的問題。在日漸復雜的前端,異常已經是程序的一部分。如果出現一些小問題,或者服務器加載上出現延遲。而我們默認的引入的script腳本,會阻塞后續的DOM渲染。一旦沒有部分異常無法及時加載完成,那么我們的頁面因為阻塞問題,將整個白屏。

          也許我們可以保證自己服務器的正常,但是你決定保證不了第三方服務器的正常,于是引入了async和defer來優化這個問題。

          再來談談script的默認,async,defer的之前的差異。

          默認情況下:瀏覽器會立即加載并執行指定的腳本。指定的腳本,指在script標簽之上的腳本。所以,如果script放在header中,而對應的文件還未加載完成,會形成阻塞。所以這就是現在很多頁面,都會使用默認且把scipt放在頁面結尾的原因。

          async情況下:async ,加載和渲染后續文檔元素的過程將和 script.js 的加載與執行并行進行(異步)。async是亂序的。

          defer情況下:defer,加載后續文檔元素的過程將和 script.js 的加載并行進行(異步),但是 script.js 的執行要在所有元素解析完成之后,DOMContentLoaded 事件觸發之前完成。defer是順序執行。

          此外,async跟defer,不支持或者不兼容IE9一下瀏覽器,總體來說,筆者還是覺得script放最下方靠譜一些。

          6.文本元素的冒泡與委托

          適合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。

          • 優點:1.減少事件注冊,節省內存。例如上面代碼,只指定 父元素的處理程序,即可管理所有所有子元素的“click”事件;2.簡化了dom節點更新時,相應事件的更新
          • 缺點:1.利用事件冒泡的原理,不支持不冒泡的事件;2.層級過多,冒泡過程中,可能會被某層阻止掉;3. 理論上委托會導致瀏覽器頻繁調用處理函數,雖然很可能不需要處理。所以建議就近委托,比如在ol上代理li,而不是在document上代理li。4. 把所有事件都用代理就可能會出現事件誤判。比如,在document中代理了所有button的click事件,另外的人在引用該js時,可能不知道,造成單擊button觸發了兩個click事件。


          html章節,本文僅列出筆者任務相對重要的知識點,且介紹上,針對重點。當然,遺漏很正常,希望能收到你的意見。


          喜歡的老鐵,加個關注!今后會分享更多的前端干貨,歡迎點贊轉發關注[比心][比心][比心]

          來源 https://juejin.im/post/6867715946941775885


          上一篇:前端入門-html 表單
          下一篇:HTML DOM 事件
          主站蜘蛛池模板: 91福利视频一区| 国产在线观看精品一区二区三区91| 男人的天堂亚洲一区二区三区| 国精产品一区二区三区糖心| 少妇一夜三次一区二区| 久久久久久免费一区二区三区| 蜜桃传媒一区二区亚洲AV| 国产在线精品一区二区在线观看| 日本一区二区三区四区视频 | 国产aⅴ精品一区二区三区久久 | 在线视频一区二区三区三区不卡 | 久久精品黄AA片一区二区三区| 免费无码一区二区| 色国产在线视频一区| 日韩精品一区二区三区老鸭窝| 精品日产一区二区三区手机| 亚洲色婷婷一区二区三区| 伊人色综合视频一区二区三区| 精品视频一区二区三区在线播放| 久久精品一区二区| 国产主播一区二区三区| 一区二区三区四区精品视频| 国产一区二区三区不卡在线看 | 日本一区二区三区中文字幕| 无码AV中文一区二区三区| 国产成人一区二区三区免费视频| 国产亚洲无线码一区二区| 夜精品a一区二区三区| 国产激情з∠视频一区二区| 精品一区二区三区在线播放| 精品视频无码一区二区三区| 精品国产一区二区三区久久久狼| 无码人妻精品一区二区三区99不卡| 文中字幕一区二区三区视频播放| 日韩视频在线观看一区二区| 五月婷婷一区二区| 久久精品国产亚洲一区二区| 精品一区二区AV天堂| 国产一区二区在线观看| 亚洲一区二区中文| 亚洲色大成网站www永久一区|