你有过这种经历吧:打开单位的OA系统或者某个学校、银行的老网站,浏览器直接白屏,页面正中间一行字——“请使用IE浏览器访问”。换Chrome不行,换Edge还是不行,最后只能翻出尘封已久的IE,莫名奇妙地就打开了。
这并不是网站故意刁难,而是它的底层技术栈只认IE内核,也就是Trident内核。而你现在用的Chrome、Edge(新版)、国产浏览器几乎清一色是Chromium内核,两边“语言不通”,自然就访问不了。
这篇文章就把这事一次讲透:IE内核和Chromium内核到底差在哪,为什么2024年了还有网站非IE不可,以及作为普通用户,不装老IE的前提下还有什么靠谱办法能打开这些“老顽固”页面。如果你是开发人员,后面对IE模式原理和站点兼容策略的介绍也值得看。
1. 浏览器内核到底是什么:IE内核和Chromium内核的核心差异
1.1 浏览器内核不是浏览器本身
很多人以为“IE内核”就是指IE浏览器,这个概念得先掰扯清楚。浏览器本身由UI界面、地址栏、网络栈、数据存储、渲染引擎和脚本引擎等N多模块组成,其中渲染引擎负责把HTML、CSS解析成你看到的页面,脚本引擎负责执行JavaScript,这两部分合起来通常被称为“浏览器内核”。
类比一下:浏览器是整车,内核是发动机。IE这台车用的是Trident发动机,Chromium内核的浏览器用的是Blink发动机。底盘、变速箱都不同,能跑的路况自然不一样。
目前市场上常见的内核大概就四种:
内核名称
代表浏览器
现状
Trident
IE浏览器(IE4~IE11)
已停止支持,仅通过Edge IE模式存续
Blink
Chrome、新版Edge、Opera、几乎全部国产浏览器
主流,快速迭代
Gecko
Firefox
小众但稳定
WebKit
Safari
macOS/iOS专属
注意,新版Edge已经切换到Chromium内核(Blink),所以微软自家的Edge和Chrome其实“同芯”,这也是为什么你用Edge打开老OA系统同样会失败的直接原因。
1.2 Trident内核:二十多年的老将,问题出在“老”
Trident内核从1997年的IE 4开始投入使用,在IE 6时代达到了接近垄断的占有率。但太早的成功反噬了它:从IE 6到IE 11,Trident对W3C标准的支持始终慢半拍,CSS 2/3部分属性解析残缺,ES6语法完全不认识,动画、渐变、弹性布局这些现代网页的基本操作,在Trident里基本是灾难。
更麻烦的是,Trident还带了一堆“私货”。它支持ActiveX控件——这是一套能让网页调用本地系统能力的插件机制;支持VBScript脚本语言;还有document.all这类非标准DOM方法。当年开发者用这些特性玩得飞起,因为能实现HTML5时代都费劲的功能,比如从网页直接读取身份证读卡器、调用U盾签名、操纵Word文档。
问题是这些“私货”只有Trident认。Chromium内核既不支持ActiveX,也不懂VBScript。于是当这类老网站在Chromium里运行时,要么插件加载失败,要么脚本执行直接报错,最后页面白屏。
1.3 Chromium内核和Blink:新世界的发动机
Chromium是Google主导的开源浏览器项目,2008年随Chrome一起面世。早期它用的是WebKit内核,2013年Google觉得WebKit的架构跟不上自家多进程方案,直接把渲染引擎独立出来fork成了Blink,从此Chromium内核走的全是“自己人”的路线。
Blink的核心优势在于三件事:第一,紧跟W3C标准,每年新增的CSS/JS特性几乎当年就会落地;第二,多进程架构,每个标签页独立进程,单个页面崩溃不会拖垮整个浏览器;第三,开源,提供强大的扩展API。这些特性让它迅速成为浏览器事实标准,连微软都不得不低头,2018年宣布Edge换用Chromium内核。
1.4 两个内核同期运行会出什么问题
一个网站能不能正常显示,本质上就是“代码能否被内核正确解释执行”。同一段代码,在Trident里是合法操作,在Blink里就是语法错误。我举个最典型的例子:
HTML
复制
1