【问题标题】:Run inline script in window opened by Chrome extention在 Chrome 扩展程序打开的窗口中运行内联脚本
【发布时间】:2021-03-02 15:41:24
【问题描述】:

我正在做 Chrome 扩展并在那里使用以下代码:

var wnd = window.open()
wnd.document.write("<script>console.log(123)</script>")

当我运行它时,会打开新选项卡,但由于错误而未执行脚本

(未知)拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' blob: filesystem:”。要启用内联执行,需要使用“unsafe-inline”关键字、哈希 ('sha256-HNzGVZJz/a6AgeYzhJ2eI5ogYei3YBUxeYiDI0NUpyU=') 或随机数 ('nonce-...')。

我不知道应该如何在window.open 中指定unsafe-inline

如果重要,扩展清单:

{
  "manifest_version": 2,
  "name": "My ext",
  "version": "1",

  "description": "My ext",
  "icons": {},

  "background": {
    "persistent": true,
    "scripts": ["background.js"]
  },

  "permissions": ["cookies", "http://*/*", "https://*/*", "tabs"]
}

【问题讨论】:

  • 扩展页面不允许内联 JS by default。最好使用另一种方法:Pass data or modify extension html in a new tab/window
  • @wOxxOm,请注意,我正在尝试将脚本内联到普通标签页 (about:blank),而不是作为扩展的一部分的页面。
  • 是的,我建议的方法可以说是更好的替代方案,可以以不同的方式完成您想要的所有事情。
  • @wOxxOm,我不明白您的具体建议。我认为没有一种方法可以将脚本添加到打开的页面中而不使所有脚本在扩展上下文而不是页面上下文中运行。
  • 看来我猜错了你的目标,我以为你只是想在新页面中显示一些结果。好吧,您仍然可以尝试使用第一个链接来放松 CSP,因为显然新窗口继承了扩展程序的 CSP。

标签: javascript google-chrome google-chrome-extension content-security-policy


【解决方案1】:

如果页面标记不是很丰富,可以使用data-uri打开页面:

var html = `<script>console.log(123)</script>`

chrome.tabs.create({
  active: true,
  url: "data:text/html," + encodeURIComponent(html)
}, tab => {})

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 2017-12-29
    • 2018-04-29
    • 2015-07-15
    • 2013-08-17
    • 1970-01-01
    • 2018-12-03
    • 2012-08-24
    相关资源
    最近更新 更多