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

时间:2018-12-03 11:07:53

标签: javascript google-chrome-extension firefox-webextensions content-script

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

清单设置:

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

content-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}"
        }
},

1 个答案:

答案 0 :(得分:1)

如图所示,

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

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

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

两个选项:

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

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

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

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

    此方法必需声明它可通过网络访问。