IE8及以下需用html5shiv声明HTML5标签、userData或cookie替代localStorage、excanvas模拟Canvas、JS手动校验表单,且须注意事件绑定和样式获取等细节兼容。

HTML5新标签在IE8及以下无法渲染怎么办
HTML5新增的 、、 等语义化标签,在IE8及更早版本中默认不被识别为块级元素,会导致样式失效、布局错乱。这不是JS兼容问题,而是浏览器根本没把它们当HTML元素处理。
- 必须用
document.createElement()主动声明这些标签,让旧IE“认识”它们 - 仅靠CSS
display: block不够——IE8遇到未知标签会跳过整个样式规则 - 推荐使用
html5shiv(现名html5-shim),它内部就是批量调用document.createElement()并触发重绘 - 加载位置必须在
中,且要在任何CSS之前;否则CSS已解析完毕,再创建元素也来不及应用样式
localStorage 在IE7及以下完全不可用怎么替代
localStorage 是HTML5核心API,IE7及更早版本原生不支持,连检测都返回 undefined。不能靠polyfill模拟持久存储,因为底层缺乏持久化机制。
- 优先降级到
userData(仅IE5.5–IE7支持):需配合XML格式和特定行为(behavior)绑定 - 次选方案是
cookie:容量小(4KB)、每次请求自动发送、无加密保障,但兼容性最广 - 避免用
window.name模拟——它在页面跳转后仍存在,但跨域、安全策略、长度限制(约2MB但不稳定)风险高 - 检测方式必须写成
typeof localStorage !== 'undefined' && localStorage !== null,不能只判undefined
Canvas绘图在IE8及以下如何fallback
标签本身可被IE8识别(作为普通HTML元素),但其2D上下文接口(getContext('2d'))完全不存在。直接调用会报 Object doesn't support property or method 'getContext' 错误。
- 必须先检测
document.createElement('canvas').getContext是否为函数,再执行绘图逻辑 - IE6–IE8可用
ExplorerCanvas(excanvas.js):它用VML重写2D API,但不支持阴影、渐变、图像平滑等高级特性 - 注意:excanvas必须在
元素创建**之后**再初始化,否则无法绑定 - 更稳妥的做法是服务端判断User-Agent,对老IE直接输出SVG或静态图片,避开客户端JS补丁
if (!document.createElement('canvas').getContext) {
document.write('');
}表单新属性(required、email验证等)如何让老浏览器有基本校验
required、type="email"、pattern 这些HTML5表单特性在IE9以下完全被忽略,既不触发UI提示,也不阻止提交。不能指望它们提供任何用户输入保护。
立即学习“前端免费学习笔记(深入)”;
- 所有校验必须由JS兜底:监听
submit事件,手动检查input.value和正则 - 不要依赖
input.validity对象——IE8返回undefined,直接访问会报错 - 视觉反馈要自己实现:比如添加
class="error"并用CSS标红边框,不能依赖:invalid伪类 - 第三方库如
webshim可自动增强,但它会在老IE中注入大量DOM节点和事件监听,可能拖慢表单响应
老IE兼容不是加几个JS文件就能一劳永逸的事。真正棘手的是那些“看似正常却悄悄失效”的地方——比如 addEventListener 在IE8要用 attachEvent,比如 getComputedStyle 得 fallback 到 currentStyle,这些细节一旦漏掉,整页交互就卡在某个按钮上动不了。











