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

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

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

以以下HTML页面代码为例:

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

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

查看IE开发人员工具控制台中localStorage函数的实际类型,指出它是字符串...?

    typeof localStorage.setItem === 'string' // true

打印出localStorage的字符串将显示以下内容:

"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;
}"

奇怪的是,并不是所有函数都已被字符串替换,例如,相应的localStorage函数确实是一个函数,并且按预期工作。

    typeof localStorage.getItem === 'function' // true

将文档模式(仿真)更改为10或9仍无法解决问题,并且都导致相同的错误。 将文档模式更改为8会出现以下错误“对象不支持该属性或方法”,这是预期的,因为IE8不支持localStorage

在Windows 7上localStorage对象似乎“损坏/损坏”的Windows 7上,IE11是否还有其他问题?

3个解决方案
25 votes

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

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

BrutalDev answered 2020-07-22T19:35:51Z
4 votes

不仅仅是IE11的错。

可能是WEINRE被注入到页面中。 它钩接到几个系统函数中以提供开发人员工具功能,但是IE11错误地解释了对localStoragesessionStorage属性的分配,并将钩子函数转换为字符串,就好像它们是要存储的数据一样。

apache / cordova-weinre回购中有一条评论说:

        #In IE we should not override standard storage functions because IE does it incorrectly - all values that set as
        # storage properties (e.g. localStorage.setItem = function()[...]) are cast to String.
        # That leads to "Function expected" exception when any of overridden function is called.
        object[property] = hookedFunction  unless navigator.userAgent.match(/MSIE/i) and (object is localStorage or object is sessionStorage)

好像是正在使用的WEINRE的旧版本,还是此更改尚未正式发布(自2013年以来一直存在)。

sompylasar answered 2020-07-22T19:36:25Z
2 votes

我的localStorage返回未定义,我不知道为什么-直到意识到这是因为我是直接从我的计算机([file:/// C:/ Users /)运行HTML页(带有localStorage脚本)的。 ..)。]当我从服务器/本地主机访问该页面时,localStorage确实已定义并正常工作。

holm50 answered 2020-07-22T19:36:45Z
translate from https://stackoverflow.com:/questions/21155137/javascript-localstorage-object-broken-in-ie11-on-windows-7