如何将javascript注入Chrome应用程序的DOM中
我正在开发一个chrome应用程序,它可以作为基于的Arduino代码编辑器。生成一个js脚本(我们称之为如何将javascript注入Chrome应用程序的DOM中,javascript,google-chrome,google-chrome-app,code-injection,Javascript,Google Chrome,Google Chrome App,Code Injection,我正在开发一个chrome应用程序,它可以作为基于的Arduino代码编辑器。生成一个js脚本(我们称之为output.js),该脚本包含led切换逻辑或我们希望通过arduino实现的任何其他功能,并使用browserify与其他节点依赖项一起编译。在他们的文档中,他们在index.html中静态引用这个脚本 由于我正在开发一个编辑器,允许用户编写任意代码来处理arduino,因此我正在动态生成output.js的内容。我已经成功地生成了output.js的内容,并编写了一个函数,将该数据注入
output.js
),该脚本包含led切换逻辑或我们希望通过arduino实现的任何其他功能,并使用browserify与其他节点依赖项一起编译。在他们的文档中,他们在index.html
中静态引用这个脚本
由于我正在开发一个编辑器,允许用户编写任意代码来处理arduino,因此我正在动态生成output.js
的内容。我已经成功地生成了output.js
的内容,并编写了一个函数,将该数据注入到脚本
标记中。但是,Google Chrome抛出了一个错误:
Refused to execute inline script because it violates the following Content Security Policy directive:
"default-src 'self' blob: filesystem: chrome-extension-resource:".
Either the 'unsafe-inline' keyword, a hash ('sha256-Mugizlz7AFKJ2hm6UA9ySY/31cKCVhLaEX9/QYpJIsk='),
or a nonce ('nonce-...') is required to enable inline execution.
Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
因此,我意识到我需要执行内联javascript,这可能是一个潜在的安全漏洞。我知道它们是专门为将自定义JS或CSS注入网页而设计的,但它们在网站或网址的上下文中工作
我想在一个独立的chrome应用程序中修改dom并注入自定义JS,而不是在一些网站或选项卡的上下文中工作的chrome扩展。无论我在这方面做了多少研究,我想内容脚本对chrome应用程序来说都不是一个有效的概念。然后如何将javascript注入到chrome应用程序的DOM中。在这种情况下,除了内容脚本,我还有哪些可能的替代方案?制作一个
manifest.json
文件可能会有所帮助,该文件包含错误消息中的哈希值
例如,您的manifest.json
可能如下所示:
{
"manifest_version": 2,
"name": "arduino editor",
"version": "1.0.0",
"minimum_chrome_version": "46",
"content_security_policy": "script-src 'self' 'sha256-Mugizlz7AFKJ2hm6UA9ySY/31cKCVhLaEX9/QYpJIsk='",
"background": {
"page": "background.html"
}
}
更多详细信息,请参阅下面的帖子
谢谢您的快速回复,杰夫。我有一个类似的
manifest.json
,但是output.js
的内容可以动态更改,因此我不能在manifest中硬编码sha256
签名,因为一旦脚本被修改,签名就会无效。你能在构建系统中重新计算sha256
吗?即使我可以,我必须用新签名更新清单
。我不认为在运行时对chrome应用程序来说这是一个可行的选项。chrome应用程序可能会声明一个。您可以尝试开发人员在其中创建一个函数,该函数接受要执行的JS文件的URL。检查此项以获取更多代码参考。