为什么在Internet Explorer中访问localStorage对象会抛出错误?

时间:2012-11-15 07:04:59

标签: javascript internet-explorer local-storage modernizr

我处理客户端问题,其中Modernizr意外地未检测到Internet Explorer 9中对localStorage对象的支持。我的页面正确使用了HTML 5 doctype(<!DOCTYPE html>)和开发人员工具报告该页面具有IE9的浏览器模式和IE9标准的文档模式,因此我希望这可以工作。

我已调试到Modernizr中的以下try / catch块,并发现一旦访问localStorage对象就会抛出JavaScript错误。

tests['localstorage'] = function() {
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch(e) {
        return false;
    }
};

在某些计算机上,JavaScript错误的消息为The system cannot find the file specified.。在其他情况下,只有Invalid argument.并且Internet Explorer会在它抛出错误之前正好阻塞5分钟。

是什么导致访问localStorage对象在Internet Explorer上抛出错误?

2 个答案:

答案 0 :(得分:9)

我发现最低级子域与Internet Explorer上Restrictions on the File Mask and File Name Properties中记录的其中一个保留设备名称匹配,然后访问localStorage对象将引发错误。

可能会发生此问题,因为内部Internet Explorer在访问localStorage对象时尝试使用保留的设备名称访问文件系统以满足Storage object initialization steps

这肯定是一个非常好的边缘情况,但如果您的网页来自服务器,其最低级子网域恰好是conprnauxclock$中的任何一个,nulcom1com2com3com4com5com6com7,{ {1}},com8com9lpt1lpt2lpt3lpt4lpt5,{{1 }},lpt6lpt7(例如lpt8)那么这就是你看到这个问题的原因。

在这种情况下选择一个不是保留设备名称的低级子域解决了这个问题。

答案 1 :(得分:4)

我们遇到了类似的问题,因为我们在机器上运行了CCleaner。

要解决:

互联网选项 - &gt;浏览历史记录 - &gt;删除:

请务必检查除第一个选项以外的所有选项(保留收藏的网站数据)。

我们能够修复,然后再次使用CCleaner重现此问题,然后重新修复。

访问此网站以获取更多信息:http://grekai.wordpress.com/2013/02/24/localstorage-the-system-cannot-find-the-path-specified/