2012-05-18 57 views

回答

1

沒有明確的機制,當擴展安裝到運行的代碼 - 你應該簡單地做它時,你的擴展首次運行。最簡單的方法是檢查用戶名是否已經設置。如果不是 - 顯示提示。

不建議顯示模式對話框,這些對用戶來說非常煩人,特別是當他們在Firefox啓動過程中突然出現時。你應該在標籤頁中打開你的頁面。有點複雜:Firefox啓動時可能會恢復以前的會話。如果您打開頁面太早,會話恢復機制可能會取代它。所以,你應該等待sessionstore-windows-restored notification,這樣的事情應該工作:

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); 
Components.utils.import("resource://gre/modules/Services.jsm"); 

var observer = { 
    observe: function(subject, topic, data) 
    { 
    Services.obs.removeObserver("sessionstore-windows-restored", this); 

    var browser = window.getBrowser(); 
    browser.loadOneTab("chrome://...", {inBackground: false}); 
    }, 
    QueryInterface: XPCOMUtils.generateQI([ 
    Components.interfaces.nsIObserver, 
    Components.interfaces.nsISupportsWeakReference 
    ]) 
}; 
Services.obs.addObserver("sessionstore-windows-restored", observer, true); 

最後一個複雜的是,你的代碼可能是從一個瀏覽器窗口疊加運行 - 這意味着將有你的代碼的多個實例,如果會話恢復包含多個窗口。您可能希望上面的代碼只運行一次,而不是在每個瀏覽器窗口中打開您的首次運行頁面。所以你必須以某種方式進行協調,也許通過preferences。一個稍微複雜但更好的解決方案是在你的擴展中有一個JavaScript code module - 代碼模塊只加載一次,所以你不會有協調問題。

相關問題