localStorage
Internet Explorer 11(Windows 7 版本)中的对象包含某些函数的字符串表示,而不是您期望的本机调用。
这只会破坏普通的 JavaScript 并且像 JSFiddle 这样的网站对这段代码没有问题,但我怀疑这是因为有localStorage
适当的polyfills 可以纠正它。
以这个 HTML 页面代码为例:
<!DOCTYPE html>
<script>
localStorage.setItem('test', '12345');
alert(localStorage.getItem('test'));
localStorage.clear();
</script>
这在我安装的所有浏览器中都非常有效,除了 IE11。第一行“ SCRIPT5002: Function expected ”发生错误。
查看setItem
IE 开发人员工具控制台中的函数实际上是什么类型,指出它是一个字符串......?
typeof localStorage.setItem === 'string' // true
打印出字符串以setItem
显示以下内容:
"function() {
var result;
callBeforeHooks(hookSite, this, arguments);
try {
result = func.apply(this, arguments);
} catch (e) {
callExceptHooks(hookSite, this, arguments, e);
throw e;
} finally {
callAfterHooks(hookSite, this, arguments, result);
}
return result;
}"
奇怪的是,并不是所有的函数都被字符串替换了,例如,对应的getItem
函数确实是一个函数,并且按预期工作。
typeof localStorage.getItem === 'function' // true
将文档模式(仿真)更改为 10 或 9 仍然不能解决问题,并且两者都会导致相同的错误。将文档模式更改为 8 会出现以下错误“对象不支持此属性或方法”,这是预期的,因为 IE8 不支持localStorage
.
是否还有其他人在 Windows 7 上遇到与 IE11 相同的问题,其中localStorage
对象似乎“损坏/损坏”?