html5无法真正兼容ie6–ie8,ie9起部分支持但存在差异,ie10–ie11属有限兼容;需用html5shiv注册语义标签、适配事件绑定、填补es5+ api、处理css前缀及文档模式降级问题。

HTML5 无法真正兼容 IE6–IE8,这是技术事实,不是配置问题。IE9 开始支持部分 HTML5 特性,但仍有大量行为差异;IE10–IE11 属于“有限兼容”,需针对性处理。强行让旧 IE 渲染 HTML5 语义标签或 API,本质是降级 + 填补,不是“升级浏览器”。
IE6–IE8 连 <article></article> 标签都识别不了,怎么让它不崩?
这些版本不认识 HTML5 新增的语义标签(如 <header></header>、<nav></nav>、<section></section>),会把它们当未知元素,既不渲染样式,也无法被 CSS 选中。
- 必须用
document.createElement()手动“注册”标签,否则header { display: block }完全无效 - 推荐直接引入
html5shiv(注意:只对 IE9 以下生效,且必须放在中、CSS 引入之前) - 不要用
innerHTML动态插入 HTML5 标签——旧 IE 对未声明过的标签解析极不稳定 - 避免依赖
getElementsByClassName,它在 IE8 及以下不可用,改用querySelectorAll(IE8 支持有限子集)或加 polyfill
IE9 能用 addEventListener 吗?事件绑定怎么写才安全?
IE9 支持 addEventListener,但存在两个关键限制:不支持事件捕获阶段的 useCapture = true 参数;对自定义事件完全无响应。IE8 及以下只能用 attachEvent,且 this 指向 window 而非目标元素。
- 检测写法应为:
if (element.addEventListener)→ 标准模式;else if (element.attachEvent)→ IE8 及以下 - 别直接覆盖
onclick,会导致多个监听器互相覆盖;统一走绑定逻辑 - IE8 的
attachEvent('onclick', fn)中,fn内的this不是触发元素,需用window.event.srcElement获取 - 如果项目仍需支持 IE8,建议封装一个轻量
on()工具函数,内部自动分发
IE10–IE11 显示正常但 JS 报错,常见坑有哪些?
这两个版本能渲染 HTML5 结构,也支持大部分 DOM API,但对 ES5+ 语法、新对象方法、CSSOM 行为仍有明显偏差。报错往往不提示具体位置,而是静默失败或抛出 Object doesn't support property or method。
立即学习“前端免费学习笔记(深入)”;
-
Array.prototype.forEach、Array.prototype.map在 IE8–IE9 不可用;IE10+ 支持,但传入箭头函数会直接语法错误(ES6) -
JSON.parse()和JSON.stringify()在 IE8+ 存在,但 IE7 及以下需引入json2.js - CSS 中用了
flex?IE10 需加-ms-前缀,且不支持flex-wrap: wrap;IE11 去掉前缀后仍有 flex 项目基线对齐 bug - 使用
fetch或Promise?它们在 IE 全系原生不支持,必须用whatwg-fetch+es6-promise(注意加载顺序)
最常被忽略的一点:IE 的文档模式(Document Mode)可能被莫名其妙降级。哪怕写了 <meta http-equiv="X-UA-Compatible" content="IE=edge">,如果服务器返回了 X-UA-Compatible HTTP 头,或者页面嵌在 iframe 里、父页没设兼容性头,IE 仍可能回落到 IE7 模式——此时所有 HTML5 行为都会退化。务必用开发者工具的“仿真”面板确认实际运行的文档模式。










