前端同事发来一个兼容问题,说客户那边页面白屏,问对方浏览器版本,回了一句IE内核。这答案没法用,IE内核也分Trident 4到7,差一个版本行为就完全不同。查内核比查浏览器名字有用。

四大内核与它们的马甲

Trident是IE的,IE11对应Trident 7.0。Blink是Chrome、Edge、Opera现在用的,从WebKit分出来的。WebKit还在Safari和部分iOS应用里。Gecko是Firefox。国内一堆双核浏览器,极速模式用Chromium的Blink,兼容模式切回Trident,同一个浏览器两个内核版本能差十年。

最快的方法:看关于页面

Chrome和Edge地址栏输入 chrome://version,第一行就是版本号,用户代理里能看到Chrome后面跟的数字。Firefox输入 about:support,看版本和内核。国产浏览器大多也能打开这个地址,或者菜单里找关于。注意版本号前两位才决定内核大版本,比如120.x都算同一个Blink基线。

用 UA 判断并不可靠

navigator.userAgent能读,但可以伪造,国产浏览器还会同时塞进Chrome和Safari两段标识。要做特性检测而不是版本检测,用判断某个接口在不在window上的写法。UA只适合做统计和日志,别拿它当分支条件。

内核版本低会怎样

  • 语法报错:可选链、空值合并这些新语法,老内核直接抛SyntaxError,整页脚本不执行,表现就是白屏。
  • 布局错位:flex的gap、aspect-ratio不支持,栅格直接塌掉。
  • 接口缺失:IntersectionObserver、ResizeObserver没有,懒加载全部失效。

排查白屏先按F12看Console第一条红色报错,再看Sources里哪一行没解析。确认是内核太老,就上Babel转译加polyfill,或者干脆在页面上提示升级。还在维护IE11的项目,官方2022年6月已经停止支持,能推掉就推掉。