localStorage in a Firefox extension

感情迁移 提交于 2019-12-04 19:27:25

问题


I am trying to access the localStorage of a page from a Firefox extension. My understanding is that content gives a reference to the window of the current page. When I try and access the localStorage for the page with content.localStorage, I think I am getting a reference to it. However, when I try content.localStorage.length, I get nothing.

Attached is the code in question.

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);

EDIT#1: More information.

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

The length is throwing the exception "[Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"

localStorage.length works when I have it on a standard web page in Firefox, but content.localStorage.length dose not work from the Firefox extension. Now I'm confused...


回答1:


From a Firefox extension, you can access the localStorage object with window.content.localStorage, for example:

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

Anything else will give you a "Component not available" error.

As an aside, globalStorage doesn't work this way. You can't use it at all with an extension because the object is only available if it's run from a server.




回答2:


Using NsIDOMStorageManager xpcom interface you can get your local storage information.

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




回答3:


use content.localStorage.wrappedJSObject.myVariable



来源:https://stackoverflow.com/questions/4648645/localstorage-in-a-firefox-extension

工具导航Map