localStorageInternet 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:预期功能 ‘ 发生错误。
看一下该setItem函数在IE开发人员工具控制台中实际上是什么类型,指出它是一个字符串…?
setItem
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函数确实是一个函数,并且可以按预期工作。
getItem
typeof localStorage.getItem === 'function' // true
将文档模式(仿真)更改为10或9仍无法解决问题,并且都导致相同的错误。将文档模式更改为8会出现以下错误:“ 对象不支持此属性或方法”,这是预期的,因为IE8不支持localStorage。
其他人在Windows 7上的localStorage对象看来“损坏/损坏”的IE11是否有相同的问题?
原来这是Windows 7 SP1的IE11基本版本(11.0.9600.16428)中的问题。
后安装补丁来更新11.0.9600.16476(更新版11.0.2-KB2898785)问题得到解决。可以在修补程序下载页面的底部找到指向其他Windows版本(32位等)的链接。