Javascript:Firefox,为什么会出现此错误?

Javascript:Firefox,为什么会出现此错误?,javascript,firefox-addon,Javascript,Firefox Addon,我正在尝试制作一个firefox扩展,下面是我非常简单的代码: var SlashUnblocker_Button = { //************************************* var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); va

我正在尝试制作一个firefox扩展,下面是我非常简单的代码:

var SlashUnblocker_Button = {

    //*************************************
        var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

        var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
        prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);

        var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

        var urlbar = window.content.location.href;
        prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url",urlbar);
        prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url_title",document.title);

    //*************************************    

1: function () {
    if(prefManager.getCharPref("extensions.mf_unblocker.blocker_user_email") != "a@a.com")
        { 

            gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/1_options.html");
        }
        else
        {
              gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/0_register.html");
        }
  },

test: function () {alert("testing!");}

}


window.addEventListener("load", function (e)
{
    SlashUnblocker_Button['test']();
}, false);
这里是问题所在,请参见我用
/*********

请参阅中间的代码。
如果我把代码放在两个函数上面,它会抛出一个错误。。。但如果我把它放在函数1()中,它就可以正常工作。问题是我需要从两个函数中引用变量
prefManager


我做错了什么?

你试过把
/***
部分放在
var SlashUnblocker\u按钮之前吗?

你试过把
/***
部分放在
var SlashUnblocker\u按钮之前吗?

如果我没有弄错,你是在试着把代码放进一个对象

你应该把它放进一个建筑商

function SlashUnlockerButton(){

//*************************************
    this.prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

    this.prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
    prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);

    this.alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

    this.urlbar = window.content.location.href;
    prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url",urlbar);
    prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url_title",document.title);

//*************************************    

this.1 = function () {
if(prefManager.getCharPref("extensions.mf_unblocker.blocker_user_email") != "a@a.com")
    { 

        gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/1_options.html");
    }
    else
    {
          gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/0_register.html");
    }
};

this.test = function () {alert("testing!");};
}

var SlashUnblocker_Button = new SlashUnlockerButton();
//...
我还没有测试过,但这就是我的想法


如果我没有弄错的话,您正在尝试将代码放入对象中

你应该把它放进一个建筑商

function SlashUnlockerButton(){

//*************************************
    this.prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

    this.prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
    prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);

    this.alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

    this.urlbar = window.content.location.href;
    prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url",urlbar);
    prefManager.setCharPref("extensions.mf_unblocker.blocker_latest_url_title",document.title);

//*************************************    

this.1 = function () {
if(prefManager.getCharPref("extensions.mf_unblocker.blocker_user_email") != "a@a.com")
    { 

        gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/1_options.html");
    }
    else
    {
          gBrowser.selectedTab = gBrowser.addTab("chrome://mf_unblocker/content/0_register.html");
    }
};

this.test = function () {alert("testing!");};
}

var SlashUnblocker_Button = new SlashUnlockerButton();
//...
我还没有测试过,但这就是我的想法


没有,但是如果我想让我的代码被批准托管在AMO站点上,我想我必须让我的所有代码都封装在我的命名空间中。如果我想让我的代码被批准托管在AMO站点上,如果你把你的var添加到父obj上会发生什么,然后在函数1中引用它<代码>SlashUnblocker_Button.prefManager=
和1:,
SlashUnblocker\u按钮的内部,
SlashUnblocker\u按钮.prefManager.getCharPref(…
如果将var添加到父对象,并在函数1中引用它会发生什么?
SlashUnblocker\u按钮.prefManager=…
和1:,
SlashUnblocker\u按钮.prefManager.getCharPref(…