打开位于 Firefox 网络扩展中的 html 页面
Open a html page located inside Firefox web extension
我在 Firefox 网络扩展中有一些 html 文件,我想在浏览器操作事件(单击工具栏图标)上打开这些文件。我在 chrome 中的做法是:
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 的新选项卡,但页面未加载。关于我做错了什么的任何建议
在 Firefox 中,URL 被构造为 moz-extension://[some GUID here]/
,而不是 chrome-extension://[extension ID here]
。 GUID 不可预测。
为 Firefox(和 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'
});
请注意,当您使用相对 URLs 时,请确保指定完整路径(以 /
开头)。这是因为 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
我在 Firefox 网络扩展中有一些 html 文件,我想在浏览器操作事件(单击工具栏图标)上打开这些文件。我在 chrome 中的做法是:
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 的新选项卡,但页面未加载。关于我做错了什么的任何建议
在 Firefox 中,URL 被构造为 moz-extension://[some GUID here]/
,而不是 chrome-extension://[extension ID here]
。 GUID 不可预测。
为 Firefox(和 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'
});
请注意,当您使用相对 URLs 时,请确保指定完整路径(以 /
开头)。这是因为 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