Firefox扩展中的localStorage

时间:2011-01-10 15:53:57

标签: javascript html5 firefox-addon local-storage

我正在尝试从Firefox扩展程序访问页面的localStorage。我的理解是content提供了对当前页面的window的引用。当我尝试访问带有content.localStorage的页面的localStorage时,我想我正在获取它的引用。但是,当我尝试content.localStorage.length时,我什么都没得到。

附件是有问题的代码。

var myExtension = {
    init: function() {
        var appcontent = document.getElementById("appcontent");   // browser
        if(appcontent)
            appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
    },

    onPageLoad: function(aEvent) {
        var doc = aEvent.originalTarget;
        alert(content.localStorage) // alerts "[object XPCNativeWrapper [object Storage]]"
        alert(content.localStorage.length) // alerts nothing
    }
window.addEventListener("load", function() { myExtension.init(); }, false);

编辑#1:更多信息。

try{
    alert(content.localStorage.getItem('todoData'))
    alert(content.localStorage.length)
} catch (e){
   alert(e)
}

长度抛出异常“[Exception ...”组件不可用“nsresult:”0x80040111(NS_ERROR_NOT_AVAILABLE)“

localStorage.length在Firefox中的标准网页上显示时有效,但content.localStorage.length无法使用Firefox扩展程序。现在我很困惑......

3 个答案:

答案 0 :(得分:7)

在Firefox扩展程序中,您可以使用 window.content.localStorage 访问localStorage对象,例如:

var ls = window.content.localStorage;
ls.setItem("myvariable", "myvalue");
var item = ls.getItem("myvariable");

其他任何东西都会给你一个"组件不可用"错误。

顺便说一下,globalStorage并不是这样做的。您无法使用扩展名来使用它,因为该对象仅在从服务器运行时才可用。

答案 1 :(得分:2)

使用NsIDOMStorageManager xpcom界面,您可以获取本地存储信息。

https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMStorageManager

答案 2 :(得分:0)

使用content.localStorage.wrappedJSObject.myVariable