首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Chrome扩展中,获取的文本被解析到网页中,然后加载其中的脚本?

为什么在Chrome扩展中,获取的文本被解析到网页中,然后加载其中的脚本?
EN

Stack Overflow用户
提问于 2022-11-07 07:18:53
回答 1查看 20关注 0票数 0

我请求一个URL在扩展的选项页。虽然这个URL的内容是一个网页,但我此时将它作为文本读取,Chrome实际上是在文本内容中主动下载脚本,这会触发CSP。

  1. 为什么Chrome会考虑将文本内容解析成网页,然后加载脚本呢?
  2. 另外,为什么在代码中使用注释语句来获取,但是获得的内容是空白的呢?我可以通过模拟请求工具获取数据,只需填写URL而不添加任何请求头。

谢谢,我真的不明白为什么会发生这两件事。

代码语言:javascript
复制
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错误。那么,为什么要将文本解析到网页中,然后在其中加载脚本呢?

EN

回答 1

Stack Overflow用户

发布于 2022-11-07 08:39:45

这是一个铬中的缺陷,被它的开发人员认为是有意的行为。Chrome预取您获取的URL的服务器响应头中指定的资源(在您的情况下是js脚本)。由于扩展不允许远程js,这些附加请求将自动被阻止。

简单的解决方法是从默认的html头中排除Accept: */*

代码语言:javascript
复制
fetch(url, {headers: {accept: 'text/plain'}})

请注意,服务器可能很容易忽略它,仍然可以使用预加载头进行响应,在这种情况下,您可以使用chrome.webRequest (ManifestV2)或chrome.declarativeNetRequest (ManifestV3 3/V2)来删除这个报头,通常是link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74343133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档