雙核心瀏覽器核心切換控制技術

gucong發表於2018-06-19

什麼是雙核瀏覽器

雙核瀏覽器支援使用兩個或者以上的瀏覽器引擎來渲染網頁,目前絕大多數國產瀏覽器均為雙核甚至多核。

雙核到底是什麼核心

  • 基於Chromium的Blink/Webkit核心。一般在國產瀏覽器中被稱為“極速核心/極速模式”。該核心隨著該瀏覽器的更新而更新。
  • IE核心。一般在國產瀏覽器中被稱為“IE核心/相容模式”,是指呼叫Windows系統中內建的IE,並非該瀏覽器單獨內建了一套IE,該核心隨著Windows或者IE的更新而更新。

    唯一的例外情況是2012年360安全瀏覽器曾經推出內建IE的版本

IE核心的相容模式

某些國產瀏覽器在“IE核心”下,可以切換其“相容模式”,這並不是切換不同的IE核心版本,而是通過呼叫系統中IE核心的不同“文件模式”來實現的,詳細的資訊請參閱這裡。這可能造成一些問題。比如A使用者系統中安裝了IE8,使用QQ瀏覽器的“相容模式 - 7”;B使用者系統中安裝了IE11,也使用QQ瀏覽器的“相容模式 - 7”,雖然都用的同一個瀏覽器且選擇了同一個相容模式,但是對於html5表單項等諸多DOM細節,有著很大的差異。

如何配置網站要使用的渲染引擎

在html的<head>標籤中加入如下程式碼:

<!DOCTYPE html>
<html>
<head>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  ... 以下程式碼省略

複製程式碼

這裡我們一共新增了三條有關瀏覽器渲染方面的指令:

  • <meta name="renderer" content="webkit">中的webkit指令,可以讓QQ、傲遊、360等瀏覽器預設使用Chromium核心渲染頁面。
  • X-UA-Compatible 中的IE=edge指令,可以讓IE或者呼叫IE核心的瀏覽器,使用標準模式渲染網頁,注意這裡和“Edge瀏覽器”無關,只是恰巧重名罷了。
  • X-UA-Compatible 中的chrome=1指令,可以讓安裝了GCF外掛的IE,在開啟網頁時使用Chromium核心渲染頁面。

需要注意幾個重要的神坑:

  • <meta>標籤必須出現在<head>內的頂部,否則瀏覽器可能無法識別。
  • <!DOCTYPE html>文件型別宣告必須寫,否則各種瀏覽器核心均會以“IE5模式(又稱作怪癖模式、quirks模式)”渲染網頁。
  • 測試效果時,網站必須以域名訪問,內網或者本地地址方式可能對部分瀏覽器無效。
  • 如果使用者曾經自主選擇過渲染引擎,瀏覽器將記住這個選擇,它的優先順序高於我們的指令。如果測試時不小心點了,在必要的情況下需要解除安裝瀏覽器並清空使用者資料,然後重灌。
  • 應該儘量保證整站的渲染核心一致,以便避免核心切換可能帶來的cookie丟失問題。

通過js判斷當前瀏覽器核心及文件模式

<script src="//gucong3000.github.io/browser.js/browser.min.js"></script>
<script>
if (browser.MSIE) {
  alert("系統IE版本:" + browser.rv + "\n文件模式:" + browser.MSIE);
} else if (browser.Edge) {
  alert("Edge核心瀏覽器");
} else if (browser.Webkit) {
  alert("Blink/Webkit核心的瀏覽器");
} else if (browser.Gecko) {
  alert("Gecko核心的瀏覽器");
}
</script>
複製程式碼

參考文件連結

開發者可控制核心切換

只支援使用者自主切換核心

資料暫缺或不明確

相關文章