FF扩展:在浏览器的多个实例上持续存在的全局变量,直到重置?

时间:2010-05-04 09:09:12

标签: javascript firefox xul scope

我们可以使用一个全局变量来保存多个浏览器实例(FF)吗? 我正在构建一个ff扩展,它必须占用主机和放大器。来自用户的端口名称,然后使用该主机和端口相应地执行菜单选项。此主机和端口必须保持相同,直到用户重置它(将为其提供选项) 在JS文件中将变量声明为全局变量时,每次重新启动浏览器时它都将变为null。任何人都可以帮我解决如何以及在何处保存此变量以获得所需的功能。下面是设置首选项的代码。但对我不起作用

function setInstance() {
    if (pref_manager.prefHasUserValue("myvar")) {
        getString = pref_manager.getString("myvar");
        instance = getString;
    }
    if (instance == null) {
        instance = prompt("Please enter webcenter host and port");
        // Setting the values
        pref_manager.setString("myvar", instance);
        pref_manager.setIntPref("myintvar", 1);
    }
}

打开扩展菜单选项后立即调用此功能。 instance是一个全局变量,我只需要用户输入一次直到重置

2 个答案:

答案 0 :(得分:3)

您可以将其存储在Firefox的首选项中(因此它存储在about:config中,并且每次加载Firefox时都可用)。

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

// Setting the values
pref_manager.setCharPref("myvar", "mystring");
pref_manager.setIntPref("myintvar", 1);

// Getting the values
var getString = ""; // Default
if (pref_manager.prefHasUserValue("myvar"))
{
    getString = pref_manager.getCharPref("myvar");
}
var getInt = 0; // Default
if (pref_manager.prefHasUserValue("myintvar"))
{
    getInt = pref_manager.getIntPref("myintvar");
}

您可以在Mozilla Developer Center page for PreferencesAdding Preferences To An Extension Page找到更多信息。

答案 1 :(得分:3)

这是一个非常古老的帖子,但仍然。给定代码中有两个位似乎不起作用。

此代码段对我不起作用:

getString = pref_manager.getString("myvar");

相反,我使用下面的那个,对我有用:

getString = pref_manager.getCharPref("myvar");

同样适用于setter。这对我不起作用:

pref_manager.setString("myvar", "mystring");

但这样做:

pref_manager.setCharPref("myvar", "mystring");

请参阅:http://www.rietta.com/firefox/Tutorial/prefs.html