【问题标题】:localStorage in Firefox extension throws "The operation is insecure." exceptionFirefox 扩展中的 localStorage 抛出“操作不安全”。例外
【发布时间】:2014-05-27 22:40:36
【问题描述】:

我正在开发 Firefox 插件,它使用 localStorage 在网站上下文中存储用户数据。它使用标准方法通过注入的内容脚本访问 localStorage:

localStorage.getItem(key);
localStorage.setItem(key, value);

调用localStorege的代码通过PageMod注入网站:

pageMod.PageMod({
    contentScriptFile: [
        self.data.url("app.js")
    ]})

调用getItem/setItem方法时,抛出安全异常:

[异常...“操作不安全。”代码:“18” nsresult: “0x80530012(安全错误)”位置:“”]

到目前为止,我还没有找到发生这种情况的原因。我怀疑它可能与旧的 FireFox 错误有关,但概率很低:http://meyerweb.com/eric/thoughts/2012/04/25/firefox-failing-localstorage/

也许任何人都可以提出一个可能导致问题的想法?

其他信息:

  • 我们正在使用插件 SDK 1.16
  • 自 FF 29.0 RC1 起出现问题(一切都适用于 FF 28)

【问题讨论】:

  • 我无法使用 Aurora (30) 或 Nightly (31) 生成此异常
  • 是的,我们在同一条船上。打破 29,极光和夜间都很好。我怀疑这是FF29中的一个错误。

标签: javascript firefox firefox-addon local-storage


【解决方案1】:

我们也有一个扩展并且在本地存储中遇到了同样的错误。这是 29 的错误,正如@basarat 指出的那样,这个错误应该只针对 CORS 问题引发。我们已经用 Aurora 和 Nightly 进行了测试,也没有任何问题。我们正在向 Mozilla 提交一个错误。

【讨论】:

    【解决方案2】:

    如前所述,这是 Firefox 29 中的一个错误,应该在版本 30 中解决:https://bugzilla.mozilla.org/show_bug.cgi?id=980023

    目前,您可以通过重新分配内容脚本中使用的 localStorage 对象来解决此问题:

    var localStorage = unsafeWindow.localStorage;
    

    【讨论】:

      【解决方案3】:

      The operation is insecure. 仅应在跨域加载 JavaScript 文件时抛出。要启用安全操作,为 JS 文件提供服务的域必须启用 CORS:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

      【讨论】:

      • 这是一个棘手的部分,因为在这种情况下 JavaScript 文件是从浏览器资源加载的。例如。 URL resource://my-extension/data/js/extension.js 当在 Firefox 中禁用 CORS 时也会引发同样的错误
      • 这不是真的。当用户在他们的浏览器中拒绝访问时,当您访问个人数据(本地存储、cookie 等)时也会发生这种情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2014-03-05
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多