1. 程式人生 > 實用技巧 >不同瀏覽器的核心

不同瀏覽器的核心

什麼是瀏覽器核心?

網頁上所用到的語言有:html,css,JavaScript等,其中,前兩者通常決定了該頁面長什麼樣,它們是可以說都是約定的規範。不同的瀏覽器在獲取到某頁面的程式碼檔案後,負責根據這套規範將程式碼渲染出來呈現給使用者,瀏覽器核心所做的就是這個渲染工作。因此,瀏覽器核心,也被稱為排版引擎(layout engine)、渲染引擎(rendering engine)。

核心在瀏覽器中的作用是什麼?

瀏覽器核心對於瀏覽器而言,是基礎,是依託。如果沒有了瀏覽器核心,那麼瀏覽器是無法獨立存在且產生作用的。它的存在,決定了網頁的呈現的內容、格式以及效果。所以說,一個好的瀏覽器,一定是基於有一個穩定、高階、作用明顯的瀏覽器核心的。

常見的瀏覽器核心有哪些?

(1)TRIDENT核心

該核心程式在1997年的IE4中首次被採用,是微軟在Mosaic程式碼的基礎之上修改而來的,並沿用到IE11,也被普遍稱作”IE核心”。Trident實際上是一款開放的核心,其介面核心設計的相當成熟,因此才有許多采用IE核心而非IE的瀏覽器(殼瀏覽器)湧現。由於IE本身的“壟斷性”(雖然名義上IE並非壟斷,但實際上,特別是從Windows 95年代一直到XP初期,就市場佔有率來說IE的確藉助Windows的東風處於“壟斷”的地位)而使得Trident核心的長期一家獨大。

微軟很長時間都並沒有更新Trident核心,這也導致了後面的兩個後果: 一是Trident核心曾經幾乎與W3C標準脫節(2005年) 二是Trident核心的大量 Bug等安全性問題沒有得到及時解決,然後加上一些致力於開源的開發者和一些學者們公開自己認為IE瀏覽器不安全的觀點,也有很多使用者轉向了其他瀏覽 器,Firefox和Opera就是這個時候興起的。Trident核心的常見瀏覽器有:IIE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0);以及國產瀏覽器中的相容模式。

(2)GECKO核心

Netscape6開始採用的核心,後來的Mozilla FireFox(火狐瀏覽器) 也採用了該核心,Gecko的特點是程式碼完全公開,因此,其可開發程度很高,全世界的程式設計師都可以為其編寫程式碼,增加功能。因為這是個開源核心,因此受到許多人的青睞,Gecko 核心的瀏覽器仍然還是Firefox (火狐) 使用者最多,所以有時也會被稱為Firefox核心。Gecko核心設計的相對成熟,在無法獲取原始碼的情況下,開放程度僅次於IE。

(3)WEBKIT核心

Webkit:是蘋果公司自主研發的核心,也是Safari瀏覽器使用的核心。 Webkit引擎包含渲染引擎WebCore和JavaScript引擎jsCore,均是從KDE的Khtml及Kjs引擎衍生而來,它們都是自由軟體,在GPL條約下授權,同時支援BSD系統的開發。所以Webkit也是自由軟體,同時開放原始碼。Google Chrome、Opera及各種國產瀏覽器高速模式也使用Webkit作為核心。

(4)BLINK核心

Blink是一個由Google和Opera Software開發的瀏覽器排版引擎,Google計劃將這個渲染引擎作為Chromium計劃的一部分,並且在2013年4月的時候公佈了這一訊息。這一渲染引擎是開源引擎WebKit中WebCore元件的一個分支,並且在Chrome(28及往後版本)、Opera(15及往後版本)中使用。

一些瀏覽器他們的核心:

谷歌瀏覽器:Google Chrome。
谷歌瀏覽器: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核心

東莞vi設計https://www.houdianzi.com/dgvi/ 豌豆資源網站大全https://55wd.com

js 檢測瀏覽器核心

function getBrowserInfo(){
        var ua = navigator.userAgent.toLocaleLowerCase();
        var browserType=null;
        if (ua.match(/msie/) != null || ua.match(/trident/) != null) {
            browserType = "IE";
            browserVersion = ua.match(/msie ([\d.]+)/) != null ? ua.match(/msie ([\d.]+)/)[1] : ua.match(/rv:([\d.]+)/)[1];
        } else if (ua.match(/firefox/) != null) {
            browserType = "火狐";
        }else if (ua.match(/ubrowser/) != null) {
            browserType = "UC";
        }else if (ua.match(/opera/) != null) {
            browserType = "歐朋";
        } else if (ua.match(/bidubrowser/) != null) {
            browserType = "百度";
        }else if (ua.match(/metasr/) != null) {
            browserType = "搜狗";
        }else if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) {
            browserType = "QQ";
        }else if (ua.match(/maxthon/) != null) {
            browserType = "遨遊";
        }else if (ua.match(/chrome/) != null) {
            var is360 = _mime("type", "application/vnd.chromium.remoting-viewer");
            function _mime(option, value) {
                var mimeTypes = navigator.mimeTypes;
                for (var mt in mimeTypes) {
                    if (mimeTypes[mt][option] == value) {
                        return true;
                    }
                }
                return false;
            }
            if(is360){
                browserType = '360';
            }else{
                $('html').css("zoom",".80");
            }
        }else if (ua.match(/safari/) != null) {
            browserType = "Safari";
        }
}

只有原生Chrome中存在一種MimeType“application/vnd.chromium.remoting-viewer”,由此可以判斷瀏覽器是加殼Chrome或是原生Chrome。再如,只有IE核心的瀏覽器存在ActiveXObject物件。由此可以判斷是否為IE瀏覽器

判斷瀏覽器型別,我們需要遵循以下原則:
1、採取命中特徵原則,當且僅當完全符合區分瀏覽器的特徵時我們才會採用此特徵。例如單純通過UA中MSIE來檢測是否為IE瀏覽器是不可靠的。而通過判斷是否存在MimeType“application/vnd.chromium.remoting-viewer”來斷言原生Chrome在現階段來看是可行性,但也不保證永久有效。
2、對於主流瀏覽器來說一般不存在UserAgent關鍵字衝突,但對於許多加殼瀏覽器者就不一定了。再次提出某數字瀏覽器,userAgent乾脆和IE一模一樣,但渲染模式等等不不知道動了什麼手腳,與標準IE行為差異很大。通過userAgent來判斷瀏覽器時,優先命中瀏覽器特徵字。匹配則基本確定為該瀏覽器,但未匹配也並不代表不是此瀏覽器。請悉知。
3、優先使用瀏覽器特性來區分瀏覽器,因為這個準確性較高。其次再採用userAgent輔助判斷,從而達到最高的匹配度。
4、優先檢測第三方加殼瀏覽器,目前並未有十分好的方案,只能列舉大部分世面上存在並可以判斷的瀏覽器,其他未匹配任何規則的瀏覽器,為了相容,請將規則落到四大瀏覽器之一。
5、判斷瀏覽器版本,僅僅是為了針對特定瀏覽器進行優化,需要有特定的業務場景需要才要這麼做。或者當某個瀏覽器出現相容問題時,緊急新增針對瀏覽器的補丁程式碼時才判斷。更加科學穩妥的辦法是使用標準的JS函式和API,頁面元素和樣式設計遵循W3C標準。可能存在爭議的相容性問題儘可能採用第三方框架如jQuery。這才是解決相容性問題的根本。
下面附上最近整理規納判斷瀏覽器型別的程式碼