应使用 document.documentMode 判断 Edge 的 IE 模式:值为 7–11 表示已启用 IE 渲染,undefined 则仍在 Chromium 内核;须在首屏 JS 中检测,配合明确操作提示与可访问性规范。

用 document.documentMode 判断是否真进了 IE 模式
Edge 的 IE 模式不是靠 UA 字符串识别的,navigator.userAgent 里始终含 Edge,哪怕页面已在 Trident 内核下运行。真正可靠的判断依据是 document.documentMode:值为 7–11 才说明已启用 IE 渲染;若为 undefined,说明仍在 Chromium 内核,提示用户点地址栏蓝色 e 图标才有效。
常见错误是直接检查 UA 里有没有 MSIE 或 Trident,这在新版 Edge 中永远不成立——它只在 IE11 独立进程中才返回这些字段。
- 检测逻辑必须放在首屏 JS 中,避免 DOM 加载完成前就执行
- 若
document.documentMode < 9,提示“IE 模式版本过低”,而不是笼统说“不支持” - 不要用
document.compatMode === "BackCompat"代替,它反映的是 DOCTYPE 是否生效,和 IE 模式无关
提示文案必须绑定可操作动作,不能只写“请升级浏览器”
纯文字提示如“您的浏览器版本过低”毫无作用——用户不知道哪里点、怎么操作、点了之后会发生什么。真实有效的提示要拆解成具体步骤,并与 UI 元素联动。
例如首次访问时插入的提示层:
<div id="ie-hint">本系统需在IE模式下运行,请点击地址栏左侧蓝色<code>e</code>图标并选择“在Internet Explorer模式下重新加载”</div>
立即学习“前端免费学习笔记(深入)”;
- 提示中出现的
e图标必须加<code></code>标签,让用户一眼认出是界面元素而非字母 - 文案里明确写出菜单项完整名称,因为不同 Edge 版本菜单文字略有差异
- 提示层应带关闭按钮,并用
localStorage记录用户已关闭,避免重复打扰
IE6/7 这类彻底淘汰的浏览器,别再用条件注释或 UA 匹配
<!--[if lt IE 8]>...<![endif]--> 在现代浏览器(包括 Edge、Chrome、Firefox)中早已失效,连解析都不会做。而靠 navigator.appVersion.indexOf("MSIE 6.0") 这类 UA 匹配,不仅不可靠(UA 可伪造、可被策略屏蔽),还违反特性检测原则。
真正该做的,是用 JS 检测关键 API 是否缺失:比如 fetch、Promise、Array.prototype.includes。若检测失败,再触发降级提示。
- 不要用
navigator.appName === "Microsoft Internet Explorer"做主判断——Edge 和 IE11 都返回这个值 - 避免在
<head>里就插入提示 DOM,可能导致 FOUC 或阻塞渲染 - 提示内容应提供明确替代路径:比如“推荐使用 Chrome 或 Firefox”,附带下载链接
提示信息的位置和可访问性必须符合 WCAG 要求
顶部横幅提示(如 <div class="browser-tip">)必须满足两个硬性条件:一是用 role="alert" 或 aria-live="polite",确保屏幕阅读器能播报;二是 DOM 位置紧邻 <main> 或首个焦点元素,不能藏在页脚或靠 JS 插入到 body 末尾。
更关键的是,它不能依赖 title 属性或 placeholder 显示——前者移动端无效,后者在输入时消失,都不满足“持久可见+明确关联”的基本要求。
- 提示容器建议加
tabindex="-1"并在显示后自动.focus(),让键盘用户第一时间感知 - 关闭按钮必须是
<button>,不能用<span>+ JS 模拟,否则无法键盘操作 - 颜色对比度至少达 4.5:1,避免用浅黄底色配灰字这类弱对比组合
document.documentMode 还没更新(比如刚点完 e 图标但页面尚未重载),用户就会困惑。所以所有提示文案都得严格对应当前可验证的状态,不承诺、不推测、不提前宣告。



















