2010-05-04 73 views
2

我們可以使用一個持久存在瀏覽器(FF)的多個實例的全局變量嗎? 我正在構建一個ff擴展,它必須從用戶那裏獲取主機端口名稱&,然後使用該主機和端口相應地執行相應的菜單選項。此主機和端口必須保持不變,直到用戶重置它(將爲其提供選項) 在JS文件中聲明變量爲全局變量時,每次瀏覽器重新啓動時它都會變爲空。任何人都可以幫助我瞭解如何以及在哪裏保存此變量以獲得所需的功能。下面是設置偏好的代碼。但不適用於我FF擴展:在瀏覽器的多個實例上保留的全局變量直到重置?

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

只要打開擴展菜單選項,就會調用此函數。實例是一個全局變量,我只需要用戶輸入一次直到重置

回答

2

您可以將其存儲在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 Preferences,並且Adding Preferences To An Extension Page更多信息。

+0

感謝豐富。但我應該在哪裏放這個代碼?我把它放在我的擴展的彈出窗口中,它檢查全局變量是否爲空,它會提示用戶輸入。它在瀏覽器的這個實例上保持不變。但是當我重新啓動它時,再次出現相同的promp function setInstance(){pref_manager.prefHasUserValue(「myvar」)) { getString = pref_manager.getString(「myvar」); instance = getString; (請輸入webcenter主機和端口);}(實例== null){ } if(instance == null){ instance = prompt pref_manager.setString(「myvar」,instance); pref_manager.setIntPref(「myintvar」,1); } – encryptor 2010-05-04 10:48:59

+0

我已經把上面的代碼放在問題 – encryptor 2010-05-04 10:51:46

+0

它只是用在你的JavaScript文件中/chrome/content/myext.js等無論你需要使用它。那麼如果你有一個,可能在你的startup()函數中呢?不要忘記,你也需要首先獲得偏好'(var pref_manager = Components.classes [「@ mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);)' – 2010-05-04 11:01:53

2

這是一個很舊的帖子,但仍然。在給定的代碼中有兩個位似乎不起作用。

該代碼段會不會爲我工作:

getString = pref_manager.getString("myvar"); 

相反,我用下面的一個,並且爲我工作:

getString = pref_manager.getCharPref("myvar"); 

同樣適用於制定者。這不會爲我工作:

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

但這:

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

參見:http://www.rietta.com/firefox/Tutorial/prefs.html

相關問題