2011-06-08 97 views
3

Firefox 4公開了一些事件來檢測用戶何時卸載擴展。我可以得到onUninstalling(當用戶點擊刪除擴展名時),但當onUninstalled觸發時(這應在重新啓動後發生)時,我無法獲得任何結果。在我的Firefox擴展中,onUninstalled事件似乎沒有觸發

Components.utils.import("resource://gre/modules/AddonManager.jsm"); 
AddonManager.addAddonListener({ 
    onUninstalled: function(addon){ 
     //does not work 
     alert("uninstalled!"); 
    }, 
    onUninstalling: function(addon){ 
     //works as expected 
     alert("uninstalling!"); 
    } 
    }); 

我最終希望在用戶卸載我的擴展後顯示一個頁面。如果可以,我寧願在onUninstalled後執行此操作。

回答

4

方法onUninstalled在擴展已被刪除後調用 - 因此您的擴展不能接收它自己的卸載事件,它不再接收它。但是,您可以獲得有關正在卸載的其他附加組件的通知,這是此事件的要點。看看源代碼,看起來還有一個額外的問題 - 這個通知只發送給不需要重啓的附加組件。這是有道理的,因爲重啓可以徹底改變這種情況,因爲外部應用程序在擴展目錄中添加或刪除了附加組件。因此,Firefox甚至不會嘗試傳達在未運行時發生的更改,任何偵聽器都應該簡單地重新讀取每個瀏覽器啓動時的加載項列表。總之,作爲一個「經典」擴展,即使這個事件不能保證擴展將被卸載(用戶仍然可以恢復他的選擇),您仍然需要使用onUninstalling。引導程序擴展(不需要重新啓動的擴展程序,請參閱https://developer.mozilla.org/en/Extensions/Bootstrapped_extensions)使其更容易,即使禁用擴展程序,也會調用bootstrap.js中的方法uninstall()。但是,將您的分機轉變爲自舉分機並不總是那麼容易,但有幾個附加條件:http://adblockplus.org/blog/how-many-hacks-does-it-take-to-make-your-extension-install-without-a-restart

+0

很好的解釋!謝謝你的深思。 – Newtang 2011-06-10 04:56:48

相關問題