瀏覽器內核及對應兼容性的處理問題


 眾所周知,目前市場上最火的五大瀏覽器是:google chrome、firefox(FF)、Internet Explorer(IE)、safari、opera。

  

 他們相對應的內核是什么呢?

  谷歌瀏覽器:Google Chrome,谷歌瀏覽器之前一直使用蘋果的webkit內核,但是現在它與蘋果內核分道揚鑣,自己開創了新的blink內核,這個內核也在被歐鵬(opera瀏覽器)共同采用和開發;

  火狐瀏覽器:Mozilla Firefox ,內核是Gecko;

  opera瀏覽器:內核是blink;

  Safari瀏覽器:使用的是蘋果公司自己的內核webkit;

  IE瀏覽器:微軟出品的瀏覽器,IE4以上版本都是Trident內核。由於壟斷性,IE在很長一段時間內沒有更新,導致兩個后果:一是IE與W3C標准脫節,二是Trident內核大量的bug問題沒得到及時解決。所以這就給了其他瀏覽器機會,比如firefox等。也正是這些原因,使Web前端開發人員大費周折,特別是IE6正處在新舊交替的關鍵地方(已經逐漸被舍棄)。

 

  當然除了這五大瀏覽器之外,市場上還有很多,例如:

  搜狗瀏覽器:兼容模式(IE:Trident)和高速模式(webkit);

  遨游瀏覽器:兼容模式(IE:Trident)和高速模式(webkit);

  QQ瀏覽器:普通模式(IE:Trident)和極速模式(webkit);

  360極速瀏覽器:基於谷歌(Chromium)和IE內核;

  360安全瀏覽器:IE內核。

 

 當然,既然瀏覽器的內核不同,那么瀏覽器在解析代碼的時候就會有可能不一樣,因為他們所支持的方法有不同之處。

 在pc端,通用的方法有三種:分別是能力檢測、代理檢測和怪癖檢測。

  1.能力檢測(常用):通過獲取標簽的API,檢測他是否支持這個API,如果支持,那么就用,否則就換另一種API來達到效果,例如原生js中常用的innerText方法:

 1 // 書寫innerText的兼容性代碼:
 2 // 獲取標簽的innerText(兼容所有瀏覽器)
 3 function getInnerText(element) {
 4     if (typeof element.innerText === "string") {
 5         return element.innerText;
 6     } else {
 7         return element.textContent;
 8     }
 9 }
10 
11 //設置標簽的innerText(兼容所有瀏覽器)
12 function setInnerText(element, value) {
13     //能力檢測
14     if (typeof element.innerText === "string") {
15         element.innerText = value;
16     } else {
17         element.textContent = value;
18     }
19 }

  2.代理檢測:通過在瀏覽器中的控制台(console.log)中輸入navigator.userAgent,來獲得瀏覽器的相關信息。

  3.怪癖檢測:由於有些瀏覽器有自己獨特的特征,通過檢測瀏覽器有無對應的特征,來分辨瀏覽器。

 

這些方法僅僅是本人在開發中遇到的方法,希望在開發過程中能與大家共同分享,可能還有其它方法,如果大牛們還有其他方法,還請留言,多多指教!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM