【问题标题】:Open options page from content-script on button click?单击按钮时从内容脚本打开选项页面?
【发布时间】:2018-12-03 11:07:53
【问题描述】:

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

清单设置:

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

【问题讨论】:

  • 任何错误信息?
  • 查看 MDN 关于 web_accessible_resources 的文章 - UUID 是随机的,您应该在 js 代码中使用 browser.runtime.getURL 来获取真实的 URL。

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


【解决方案1】:

您的内容脚本,如图所示,实际上是一段 HTML 而不是 JavaScript,正如预期的那样。所以它不会工作。也许那不是您的实际代码,只是您创建的代码?

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

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

两种选择:

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

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

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

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

    此方法要求将其声明为可通过网络访问。

【讨论】:

  • 我在清单中使用了一个固定的 id 为:“applications”:{“gecko”:{“id”:“{adacfr40-acra-e2e1-8ccb-e01fd0e08bde}”}},跨度>
  • 扩展 ID 和 UUID 不同。
  • browser.runtime.getURL("options.html") 工作:),谢谢
  • 尝试使用这个主题选项页面 - fonts.googleapis.com/icon?family=Material+Icons"> 但这不起作用?我什至将所有这些文件添加到 web 可访问下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多