html5shiv仅解决ie6-8对html5新标签的识别问题,通过document.createelement()使标签进入dom并支持css样式,但不支持语义、表单属性或api;必须置于最顶部、用条件注释加载,并配合显式display:block声明。

html5shiv 只解决标签识别,不等于能用
IE8 及以下遇到 <header></header> 会直接跳过,DOM 里没节点,CSS 选中不了,display: block 也无效。html5shiv 的作用很窄:在页面解析前调用 document.createElement() 让 IE 知道这些是合法标签名。
- 必须放在
最顶部,且在任何 CSS 和业务 JS 前加载 - 要用条件注释只对 IE8- 加载:
<!--[if lt IE 9]><script src="html5shiv.min.js"></script><![endif]--> - 即使用了 html5shiv,CSS 里仍要显式写:
header, section, article { display: block; },因为 IE 默认当 inline 元素处理 - 它不管语义、ARIA、可访问性,屏幕阅读器可能仍忽略
<main></main>等角色
表单属性(required/placeholder)得靠 JS 模拟,光加脚本没用
required、placeholder 这类属性在 IE9 以下压根不进 DOM,input.required 是 undefined,html5shiv 完全无感。必须用 JS 补逻辑。
-
placeholder需监听focus/blur,动态插入/移除文本节点,且不能污染input.value -
required要在submit时手动遍历检查,调用setCustomValidity()或弹窗提示 - 推荐用
webshim库,按需加载模块:webshims.polyfill('forms'),比手写更稳 - 别试图用
::placeholder伪类“修复” IE8 —— 它根本不解析这个 CSS 规则
fetch / Promise / AbortController 必须按需 polyfill,Babel 解决不了
IE 全系不支持 fetch,Promise 在 IE11 才部分支持,AbortController 更是全系缺席。Babel 转译解决不了——这是原生 API 缺失,不是语法问题。
-
Promise:用core-js/stable/promise(比es6-promise更贴近标准,修复了 Edge 12–13 的 bug) -
fetch:用whatwg-fetch,但注意它基于XMLHttpRequest,不支持流式读取或原生AbortSignal -
AbortController:单独引入abortcontroller-polyfill,再和whatwg-fetch配合才能实现取消请求 - 如果项目已用
axios,通常不用额外加fetchpolyfill —— 它内部已 fallback 到 XHR,但要注意withCredentials默认行为差异
customElements / template / dialog 没可靠 polyfill,该降级就降级
<dialog></dialog> 在 IE 全系、Edge 18 及以下原生不支持;customElements.define() 和 <template></template> 在 IE 中完全不存在,也没有可靠 polyfill 能兜底。
- IE 完全不支持
CustomElementRegistry,Chrome 33+ 原生支持但需开启 flag - 推荐用
@webcomponents/webcomponentsjs,但别全量引入,按需加载:custom-elements-es5-adapter.js(解决 ES5/ES6 混用问题) +custom-elements.min.js - 对
<dialog></dialog>这类高交互组件,优先考虑用div+aria-modal+ 手动 focus trap 实现降级方案 - 多个 polyfill 之间可能冲突:比如同时引入
es6-promise和core-js/stable/promise会导致Promise被重复定义,部分方法行为异常
实际项目里最容易被忽略的,是 polyfill 的加载顺序和执行时机——比如 core-js 必须在所有业务代码前同步执行,而 webshim 这类依赖 DOM 就绪的库,又得等 DOMContentLoaded 后才初始化。稍一错位,功能就静默失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











