一尘不染

Windows 7的IE11中的JavaScript localStorage对象损坏

html

localStorageInternet Explorer 11(Windows 7构建)中的对象包含某些函数的字符串表示形式,而不是您期望的本机调用。

这只能用原始的JavaScript破坏,而JSFiddle这样的网站对此代码没有问题,但是我怀疑是因为有localStorage适当的polyfill对其进行了纠正。

以以下HTML页面代码为例:

<!DOCTYPE html>
<script>
  localStorage.setItem('test', '12345');
  alert(localStorage.getItem('test'));
  localStorage.clear();
</script>

这在我安装的所有浏览器(IE11除外)中都可以很好地工作。第一行’ SCRIPT5002:预期功能 ‘ 发生错误。

看一下该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上的localStorage对象看来“损坏/损坏”的IE11是否有相同的问题?


阅读 429

收藏
2020-05-10

共1个答案

一尘不染

原来这是Windows 7 SP1的IE11基本版本(11.0.9600.16428)中的问题。

后安装补丁来更新11.0.9600.16476(更新版11.0.2-KB2898785)问题得到解决。可以在修补程序下载页面的底部找到指向其他Windows版本(32位等)的链接。

2020-05-10