在处理浏览器兼容问题时,最让我头疼的是搜狗浏览器和360安全浏览器的兼容模式。有时表现为IE7内核,有时又表现为系统IE内核。上网搜了一下资料研究了一番。只是个人的小小研究,如有错误欢迎各路大神指教。
一、什么是浏览器内核
百度百科作如下解释:
浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“解释引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如HTML、JavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。
现在国内的很多浏览器都是套用外国主流浏览器 的内核,所以在国内不同的浏览器表现的效果也可能一致(网页在不同的浏览器同时错位,而且错位是一样的;或是同时正常显示),因为两个浏览器使用了同一个内核,解释网页的方式是一致的。例如:早期的chrome浏览器和搜狗浏览器的高速模式、IE浏览器和360安全浏览器。
二、现在主流的浏览器内核
维基百科:
现时主要的四大排版引擎为:Trident(应用于Internet Explorer);Gecko(应用于Mozilla Firefox);Blink(应用于Chrome );WebKit (应用于Apple Safari和早期版本的Google Chrome)。
其中WebKit公认速度快,目前作为Apple Safari及Google Chrome(直到版本27)等浏览器的主要引擎。根据StatCounter的浏览器市场份额调查,于2012年11月,Webkit市占超过了40%,它已经成为拥有最大市场份额的排版引擎。Triden兼容性强,作为IE的内核也被广泛的应用着。
必备的知识有了,下面开始正题
三、搜狗浏览器的两个模式
搜狗浏览器的官方介绍:
“高速双核引擎”是搜狗浏览器最大的亮点功能,也堪称搜狗网打造“上网最快的浏览器”征途上最具突破性的一步。新版在优化了原有ie(trident)内核的基础
上,又添加了业界公认最快的webkit内核,同时进行了多项创新和改进:
搜狗浏览器功能:
1、搜狗浏览器实现了ie内核和webkit内核的完全融合,使两个内核可共用浏览器的所有功能、共享所有数据,内核发生切换时不丢失登录,真正做到了“无缝切换”。
2、【首创】将搜狗首创并得到广泛认可的“防假死”架构创新的应用在了webkit内核上,成为“首款防假死的webkit内核浏览器”。
3、全新的双核引擎直接完整支持搜狗浏览器所有已有功能以及全部新增功能,搜狗浏览器也堪称现阶段功能最全面最丰富的双核浏览器。
4、内置覆盖全网的网页兼容性列表,可智能的根据网页的兼容情况选择“速度更快”的webkit内核或“兼容性最好”的ie内核。
5、对webkit内核进行了速度和体验上的优化,使其表现得到进一步提升。
由搜狗浏览器的介绍可知:
1、高速模式下是使用的是chrome的内核,兼容模式下是IE内核(搜狗浏览器4.0以前是兼容模式和电脑安装的IE版本一致)。
2、浏览器会自动选择模式,也可以手动切换。webkit的兼容性不及IE内核,在浏览一些网站时选择高速模式搜狗浏览器会作提示
之前版本的搜狗浏览器兼容模式是和电脑安装的IE版本是一致的(我之前电脑装了IE6搜狗浏览器兼容模式就是IE6),之后搜狗浏览器4.0进行了升级自带IE8内核。
需要说明的是如果系统版本低于IE8可以在搜狗高速浏览器选项-高级-开启自带的IE8核心(IE版本等于或高于IE8则不可选)。勾选搜狗菜单-工具-搜狗高速浏览器选项-高级里的 “在兼容模式下使用高级渲染和GPU加速” 就是系统高级版本的渲染模式;如果不勾选就是用IE7兼容性视图浏览。
搜狗浏览器的默认设置是没有勾选在兼容模式下使用高级渲染和GPU加速的,这就是为什么搜狗浏览器兼容模式的表现与IE7一致的原因。
那为什么搜狗浏览器自带的是IE8兼容模式下却表现为IE7?
我想是因为IE8的兼容模式造成的。IE8在默认情况下是使用标准模式(Standard Mode)来显示网页。 如果网页代码还没有标准化, 在IE8下可能会显示不正常。 这时候可以让用户使用兼容模式(Compatibility View) 来浏览网页。 所谓的兼容模式其实就是使用IE7的显示引擎(IE7兼容性视图)。 IE8 上有个兼容模式按钮可以让用户切换到兼容模式。(IE8切换成兼容模式:点击标签栏右面的“工具”——“兼容性视图设置”——“在兼容性模式下显示所有网站”的框选上)
搜狗浏览器的兼容模式可能正是调用了自带的IE8中的兼容模式,所以会以IE7显示。
为了确保每个用户看到的网页效果一致,我们需要限制IE8只使用其中一个模式来显示我们的网页。
指定为Emulate IE7 mode 兼容性
<html>
<head>
<!-- Mimic Internet Explorer 7-->
<metahttp-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<title>My Web Page</title>
</head>
<body>
<p>Content goes here.</p>
</body>
</html>
其内容随著指定的页面模式而更改,当要模拟IE7时,指定IE=EmulateIE7,指定IE=5,IE=7, 或IE=8来选择其中一种兼容性模式。你也可以指定IE=edge来指示IE8使用它支持的最高模式。
X-UA-compatible标头没有大小写之分。然而除了title元素及其他的meta元素之外,它必须出现在网页header节其它元素之前的位置。
使用IE8标准模式,禁止IE8使用兼容模式
在IE8以上版本的浏览器增加了一个X-UA-Compatible 头标记,用于为IE8指定不同的页面渲染模式。
<meta http-equiv="X-UA-Compatible" content="IE=8" />
这段代码表示开启IE8的标准渲染模式。但是不考虑<!DOCTYPE>指令。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
这段代码表示标准模式显示,同时使用<!DOCTYPE>指令确定如何呈现内容。一般我们首选这种兼容性模式。
所以我们如果在网页中加上了代码 <meta http-equiv="X-UA-Compatible" content="IE=8" /> 或者 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />,那么就设定要用IE8标准模式渲染网页,而不会使用兼容的模式。
四、360安全浏览器
维基百科:
360安全浏览器是奇虎360安全中心推出的一款基于IE内核的浏览器,是世界之窗开发者凤凰工作室和360安全中心合作编写的软件,其沙盘安全技术是与Sandboxie合作并共同开发的。360安全浏览器自称是“最安全的浏览器”、“中国大陆除了IE以外用户最多的浏览器”。
奇怪的是号称“中国大陆除了IE以外用户最多的浏览器”在百度统计的浏览器市场份额却找不到360浏览器。
突然想起了“3B大战”…… 360和百度的恩怨情仇大家有兴趣可以八卦一下
我对于360浏览器没有什么好感,360做过太多有争议的事。我不知道是不是我搜索方法不对,关于360的内核没有找到多少资料。只找到一个新闻稿:
《360浏览器自带IE8内核 助力微软消灭IE6》http://pcedu.pconline.com.cn/softnews/cszq/1208/2887267.html
以上是我自己上网搜索资料做出的一些整理总结,只是个人的小小研究,如有错误欢迎各路大神指教~