2012-04-09 19 views
2

我使用捆綁的可執行文件開發Firefox擴展,該擴展應在瀏覽器啓動時運行。在Firefox擴展中使用相對路徑

要運行進程,我需要獲取指向可執行文件的nsIFile或nsILocalFile實例。 我知道一個解決方案如何得到它使用目錄服務:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); 
file.append("extensions"); 
file.append("<extension id>"); 
file.append("<relative path>"); 

但這種方法有兩個缺點:

  1. 它不會在開發模式下工作,而不是安裝的擴展,當我有隻有具有真實延伸路徑的文本文件

  2. 我不確定它是否適用於所有Firefox配置,因爲硬編碼的「擴展」部分路徑

那麼是否有更好的方式來運行Firefox擴展附帶的可執行文件?

謝謝。

回答

3

您對Firefox配置文件的目錄結構做了太多假設 - 不要。 Add-on Manager API可讓您獲得擴展名內的文件路徑,您應該使用它:

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

AddonManager.getAddonByID("<extension id>", function(addon) 
{ 
    var uri = addon.getResourceURI("<relative path>"); 
    var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file; 
    ... 
});