5

我正在处理一个客户端问题,Modernizr 意外未检测到localStorageInternet Explorer 9 中的对象支持。我的页面正确使用 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 上引发错误?

4

2 回答 2

10

我发现如果最低级别的子域与Internet Explorer上的文件掩码和文件名属性的限制localStorage中记录的保留设备名称之一匹配,那么访问该对象将引发错误。

之所以会出现此问题,是因为 Internet Explorer 在内部尝试在访问对象时使用保留的设备名称来访问文件系统localStorage,以满足Storage对象初始化步骤

这当然是一个非常极端的情况,但是如果您的页面来自一个服务器,其最低级别的子域恰好是con, prn, aux, clock$, nul, com1, com2, com3, com4, com5, com6, com7, com8, com9, lpt1, lpt2, lpt3, lpt4, lpt5, lpt6, lpt7, lpt8, 或lpt9(例如http://prn.example.com)那么这很可能就是您看到此问题的原因。

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

于 2012-11-15T07:05:58.337 回答
4

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

要解决:

Internet 选项 -> 浏览历史记录 -> 删除:

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

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

访问此站点了解更多信息: http: //grekai.wordpress.com/2013/02/24/localstorage-the-system-cannot-find-the-path-specified/

于 2013-05-22T19:42:18.970 回答