【问题标题】:How to open a Firefox WebExtension options page as a tab, separate from about:addons如何将 Firefox WebExtension 选项页面作为选项卡打开,与 about:addons 分开
【发布时间】:2016-11-17 03:12:35
【问题描述】:

所以,我查看了 WebExtensions API,但我无法弄清楚如何打开一个与 about:addons 分开的 HTML 页面以获取选项。在附加 SDK 中,您可以拥有 resource://ext-id-/path/to/file.html。我已经尝试让一个目录 web 可访问并将一个 HTML 文件放在那里,但这似乎不起作用。

有谁知道我如何使用 WebExtensions 在其自己的选项卡中打开选项 HTML 文件?

【问题讨论】:

标签: javascript firefox firefox-addon firefox-addon-webextensions


【解决方案1】:

打开标签

选项页面总是在标签中:
如果您希望您的选项页面始终在选项卡中打开,您可以将属性 open_in_tab 添加到您的 manifest.json:

"options_ui" : {
  "page": "options.html",
  "open_in_tab":true
}

这将导致您的选项页面始终在选项卡中打开。在about:addons 中单击您的扩展程序的“选项”并使用runtime.openOptionsPage() 都会导致您的选项页面在选项卡中打开。

感谢BigBlutHat 提醒我这个选项。

当您的选项页面通常位于about:addons 内时,在标签中:
您可以使用 tabs.createruntime.getURL 在扩展程序中打开一个新选项卡,其中包含您想要的任何 URL,包括您的选项页面。特别是对于与您的 manifest.json 位于同一目录中的 options.html 文件,以下工作:

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

不需要可访问网络并加载 JavaScript:
您不需要将文件声明为 Web 可访问的。该页面在后台上下文中运行,因此通过将文件直接包含在<script> 标记(例如<script src="/options.js">)的src 中来加载JavaScript。这与您对弹出窗口所做的相同。 This answer 有一个扩展,它使用相同的 HTML 和 JavaScript 作为弹出窗口和选项页面。但是,它实际上并没有显示将该页面作为选项卡打开,但可以使用上述代码完成。

解析相对 URL:
ChromeFirefox 状态:

相对 URL 将相对于扩展程序中的当前页面。

注意:对于所有不同的chrome.* API 调用,Chrome 和 Firefox 并不总是以相同的方式解析相对 URL。例如chrome.executeScript()在每个浏览器中的值都不一样。

【讨论】:

  • 快速提问。如何让内容脚本在其上运行。在匹配数组中指定 moz-extension://... 会导致扩展无效。尝试将脚本设置为可通过网络访问并在
  • @KnightYoshi,该页面未在内容上下文中加载。它在后台页面上下文中。因此,脚本直接作为路径包含(不是moz-extension://,而只是/options.js),类似于您对弹出页面所做的操作。 This answer 包含一个既用作选项页又用作弹出窗口的页面。
  • 再次感谢!我对 WebExtensions API 很陌生,它与 SDK 版本完全不同。
  • @KnightYoshi,我很高兴能提供帮助。我注意到我没有从您的问题中解决的问题:您不需要将资源声明为 Web 可访问的。我已将我的 cmets 中的信息添加到答案中。
  • 还有 openOptionsPage() 方法:developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/… 它的支持程度稍低(目前),但它的作用很好而且很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2010-10-30
  • 2011-04-23
  • 2015-06-22
相关资源
最近更新 更多