0

我想在瀏覽器操作事件(點擊工具欄圖標)上打開Firefox網絡擴展中的一些HTML文件。我是這樣做的鍍鉻的方法是:打開Firefox網頁擴展中的HTML頁面

var appId = chrome.app.getDetails().id; 
var tabUrl = "chrome-extension://" + id + "/src/index.html"; 

chrome.windows.getCurrent(function (currentWindow) { 
    chrome.tabs.create({ 
     url: tabUrl 
    }); 
}); 

我所試圖做的杉木Firefox是:

//firefox doesnt support chrome.app, so I have hard coded the app id in manifest under applications.gecko.id 
var id = chrome.runtime.getManifest().applications.gecko.id; 
var tabUrl = "moz-extension://" + id + "/src/index.html"; 
//I have tried chrome-extension:// also above 

browser.tabs.create({ 
    url: tabUrl, 
    active:true 
}); 

它只是打開一個新標籤的URL,但頁面沒有加載。任何關於我在做什麼的錯誤

+0

請參閱[chrome.runtime.getURL](https://developer.chrome.com/extensions/runtime#method-getURL)。你也不需要tabs.create中的完整URL。請參閱文檔。 – wOxxOm

+1

[顯示擴展名中包含的HTML文件]的可能重複(https://stackoverflow.com/questions/40837213/show-html-file-contained-within-the-extension) – Makyen

回答

2

在Firefox中,URL構造爲moz-extension://[some GUID here]/而不是chrome-extension://[extension ID here]。 GUID不可預測。

得到了火狐(和Chrome)的URL正確的方法是使用chrome.runtime.getURL

chrome.tabs.create({ 
    url: chrome.runtime.getURL('src/index.html') 
}); 

,用來獲取絕對URL是(只有當代碼的上下文中運行工作的另一種方法你擴展頁面,而不是在內容腳本):

chrome.tabs.create({ 
    url: location.origin + '/src/index.html') 
}); 

您也可以通過一個相對URL chrome.tabs.create

chrome.tabs.create({ 
    url: '/src/index.html' 
}); 

請注意,當您使用相對URL時,請確保指定完整路徑(以/開頭)。這是因爲Firefox和Chrome以不同方式解析相對URL。例如,如果腳本在加載項子目錄「/ html /」的頁面中運行,那麼Firefox將解析相對於子目錄的URL,而Chrome將解析相對於擴展根的URL。所以:

// Running at moz-extension://[guid]/html/page.html 
//  or at chrome-extension://[id]/html/page.html 

chrome.tabs.create({url: 'newpage.html'}); 
// Firefox: Opens moz-extension://[guid]/html/newpage.html 
// Chrome: Opens chrome-extension://[id]/newpage.html 

chrome.tabs.create({url: '/newpage.html'}); 
// Firefox: Opens moz-extension://[guid]/newpage.html 
// Chrome: Opens chrome-extension://[id]/newpage.html 
+0

解決了我的問題。我有一個單獨的問題,但我怎樣才能在firefox中獲得應用程序GUID,因爲'chrome.app.getDetails()。id'在firefox中不起作用。 – BiJ

+1

@BiJ GUID僅當它是URL的一部分時纔有意義,並且您可以通過'new URL(chrome.runtime.getURL(''))。host'檢索它。儘管知道GUID並沒有任何用處。如果你想知道擴展ID,只需使用'chrome.runtime.id'。 –