背景:

想做一个chrome插件,向页面中添加脚本 css、js ,储存在storage中,每次打开页面,在content.js 中向页面注入执行页面匹配的脚本。 

现象:

开发使用v3版本会出现如下报错:

content.js:3 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' http://localhost:* http://127.0.0.1:*". Either the 'unsafe-inline' keyword, a hash ('sha256-V9GpKNFLjsNEd/UJJgggfaabRSwG4P7JESZwQazBLZY='), or a nonce ('nonce-...') is required to enable inline execution.

​​​​​​​​​​分析:

fchrome extension v3 内容安全策略 ( CSP ) 不允许 eval方法  script标签 等 向页面注入脚本

解决方案:

1.将脚本储存在sessionStorage

// content.js

sessionStorage.setItem('javascript', 'console.log("I am script from content.js! ",Date.now())')

2.向页面注入静态js脚本inject.js ,如何处理脚本的逻辑就在这个文件中

// content.js

sessionStorage.setItem('javascript', 'console.log("I am script from content.js! ",Date.now())')

// 注入inject.js

const url = chrome.runtime.getURL('inject.js')

const script = document.createElement('script')

script.src=url

document.body.appendChild(script)

3.inject.js获取脚本 并注入页面

// inject.js

const scriptStr = sessionStorage.getItem('javascript')

const script = document.createElement('script')

script.innerHTML = scriptStr

document.body.appendChild(script)

 效果:

花了很长时间才尝试出的方法。如果解决了你的问题 记得点个赞哟!

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。