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

标签 javascript internet-explorer local-storage modernizr

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

我已经调试到以下 try/catch阻止 Modernizr 并发现一旦 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 上抛出错误?

最佳答案

我发现最低级别的子域是否与记录在 Restrictions on the File Mask and File Name Properties 中的保留设备名称之一相匹配在 Internet Explorer 上访问 localStorage 对象将引发错误。

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

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

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

关于javascript - 为什么在 Internet Explorer 中访问 localStorage 对象会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392872/

相关文章:

javascript - 如果文件丢失,如何使 Gulp.src 失败?

internet-explorer - Babel 不包括 append 方法?

javascript - 获取 Angular 的值到 localStorage

javascript - 将已接受条款的用户重定向到另一个网页(cookie 或 localStorage)

javascript - hammer.js 和 SVG 交互

javascript - @media 查询在 IE 8 中不支持

javascript - 如何对齐 CSS 我的输入和标签

javascript - 弹出窗口内的空 DOM

javascript - window.close() 在 Windows Phone IE 上不起作用

html - 将本地存储用于 HTML Angular 2 项目的安全性