我请求一个URL在扩展的选项页。虽然这个URL的内容是一个网页,但我此时将它作为文本读取,Chrome实际上是在文本内容中主动下载脚本,这会触发CSP。
谢谢,我真的不明白为什么会发生这两件事。
let url = "https://www.douyin.com/user/MS4wLjABAAAA6SPZyhEA5zRYJsmNsm1Xj5PW1cGRJXZ9jx7bX5p7SwXo-a2ByHwlHbfzEbjLeroO?showTab=like"
let resp = await fetch(url)
// let resp = await request(url, undefined, {credentials: "omit"})
let text = await resp.text()
return

然后,我试图在扩展页面的Chrome控制台中获取URL,也得到了一个CSP错误。那么,为什么要将文本解析到网页中,然后在其中加载脚本呢?

发布于 2022-11-07 08:39:45
这是一个铬中的缺陷,被它的开发人员认为是有意的行为。Chrome预取您获取的URL的服务器响应头中指定的资源(在您的情况下是js脚本)。由于扩展不允许远程js,这些附加请求将自动被阻止。
简单的解决方法是从默认的html头中排除Accept: */*:
fetch(url, {headers: {accept: 'text/plain'}})请注意,服务器可能很容易忽略它,仍然可以使用预加载头进行响应,在这种情况下,您可以使用chrome.webRequest (ManifestV2)或chrome.declarativeNetRequest (ManifestV3 3/V2)来删除这个报头,通常是link。
https://stackoverflow.com/questions/74343133
复制相似问题