我正在开发一个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