在Firefox扩展弹出窗口中执行JavaScript
在Firefox扩展弹出窗口中执行JavaScript
我目前正在进行扩展开发的初步尝试。目前我只是尝试在点击按钮时显示一些信息在弹出窗口中。问题是这是动态信息,我从互联网上的一个JSON文件中获取。然而,我无法在弹出窗口中显示数据,我已经将问题缩小到似乎根本没有运行任何JavaScript代码...\n我只剩下一个非常简单的代码:\nmanifest.json:\n {\n \"manifest_version\": 2,\n \"name\": \"测试扩展\",\n \"version\": \"1.0\",\n \"description\": \"\",\n \"icons\": {\n \"256\": \"icon/button.png\"\n },\n \"permissions\": [\n \"activeTab\",\n \"storage\"\n ],\n \"browser_action\": {\n \"default_icon\": {\n \"200\": \"icon/button.png\"\n },\n \"default_title\": \"测试扩展\",\n \"default_popup\": \"popup/popup.html\"\n }\n}\n
\npopup/popup.html:\n
\n当我直接在Firefox中运行HTML文件时,它按预期显示“测试”。然而,当我运行扩展时,点击新按钮时会得到一个空的弹出窗口。\n我还尝试将JavaScript代码放在一个函数中,并通过一个按钮调用该函数,以查看是否需要一些时间才能运行JavaScript代码,但这也不起作用。\n我确信我错过了一些非常简单的东西,但是我找不到任何关于这个的信息...
问题:如何在Firefox扩展弹出窗口中执行JavaScript代码?
在WebExtension API中,默认应用了内容安全策略(Content Security Policy)。因此,无法在弹出窗口的HTML文件中执行内联的JavaScript代码。
这不仅限于以下代码:
还包括以下代码:
如果违反了这个规则,你会在浏览器工具箱(Browser Toolbox)和扩展程序调试器(Add-on Debugger)中看到一些错误信息。
为了解决这个问题,可以使用如下方式:
而不是
或者,可以在manifest.json文件的content_security_policy键中设置不安全的内联脚本来解决这个问题。但是MDN告诉我:
注意:这里的有效示例显示了CSP中键的正确使用方式。然而,对于列在addons.mozilla.org上的扩展来说,其CSP中包含了'unsafe-eval'、'unsafe-inline'、远程脚本、blob或远程资源的扩展将不被允许,因为这会存在重大的安全问题。
看起来这不是一个好的解决方法。
通过结合使用``语法和另一个方法,我能够在单击与表单相关联的提交按钮时执行代码,而无需修改扩展程序的内容安全策略。非常感谢!