Firefox 扩展中的本地存储引发"The operation is insecure."异常



我正在开发一个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(SecurityError)"位置:"]

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

也许有人能提出一个可能导致问题的想法?

其他信息:

  • 我们使用的是Addon SDK 1.16
  • 自FF 29.0 RC1以来出现问题(FF 28一切正常)

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

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

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

var localStorage = unsafeWindow.localStorage;

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

相关内容

最新更新