单击按钮从内容脚本打开选项页面?

Open options page from content-script on button click?

我正在尝试通过内容脚本从注入按钮打开我的网络扩展选项页面。这是设置:

清单设置:

"options_ui": {
    "page": "options/options.html",
    "open_in_tab":true
},
"web_accessible_resources": ["icons/icon.png", "icons/icon64.png","options/options.html"]

内容-script.js:

<a href="moz-extension://1f82d05-3abf-4bea-80e2-db87e97486d3/options/options.html" target="_blank">Settings</a>

我在这里错过了什么?另外,我知道 moz-extension: 可能不是跨浏览器操作的最佳选择,但不确定正确的命名空间应该是什么?

编辑:

我在清单中使用固定 ID 为:

"applications": {
        "gecko": {
            "id": "{adacfr40-acra-e2e1-8ccb-e01fd0e08bde}"
        }
},

您的 内容脚本 ,如图所示,实际上是 HTML 的一大块,而不是预期的 JavaScript。所以这是行不通的。也许那不是您的实际代码,而只是您创建的代码?

但是假设您确实调整了内容脚本以添加一个按钮并附加了一个侦听器(我认为超出了这个问题的范围)。如何打开选项页面?

规范方法是调用browser.runtime.openOptionsPage(), but that API can't be called from a content script.

两个选项:

  1. 坚持 openOptionsPage()。在这种情况下,您需要一个监听消息的后台(事件)页面,然后 signal from the content script 您希望打开选项页面。

    这种方法的优点是您不需要使选项页面可通过网络访问。

  2. 如果您坚持直接从内容脚本/a 标签打开页面,您可以,但您需要为您的扩展获取动态分配的 UUID 实例.

    您的选项页面的 URL 不是固定的,但应该通过 browser.runtime.getURL("options.html") 获得,并且 URL 应该在 link 创建中使用。

    此方法需要将其声明为网络可访问。