window.open打开页面后注入外部代码失败求助
问题分析与解决方案
核心原因
你这问题核心就是浏览器同源策略和目标页面的**内容安全策略(CSP)**在搞事情:
- 同源策略直接禁止不同源的窗口(你当前页面和
chrome.google.com的页面)互相访问或执行脚本,所以你没法通过newWin直接调用目标窗口的eval、fetch这些方法。 - Chrome应用商店的页面CSP配置特别严,不仅拦
eval执行,还不让加载外部域名的脚本,连javascript:伪协议的脚本都会被拦截。
为啥你的尝试全失败
- 方法1:跨源情况下根本碰不到
newWin的window对象,就算能调用,目标页面的CSP也会把javascript:的脚本请求掐了。 - 方法2:直接调用
newWin.fetch违反同源策略,浏览器直接就把这个跨源请求拦了,根本发不出去。 - 方法3:跨源下
newWin.eval根本跑不起来,而且你这代码本身还写错了——缺了闭合的引号和括号。
能行的办法(仅限合法场景)
如果是正经需求(比如做Chrome扩展),可以用Content Script来实现脚本注入:
- 在扩展的
manifest.json里配好匹配规则:
{ "manifest_version": 3, "content_scripts": [ { "matches": ["https://chrome.google.com/webstorex/*"], "js": ["inject.js"] } ] }
- 把要注入的逻辑写到
inject.js里(要是需要加载外部脚本,得通过扩展的background页面中转,不然还是会被CSP拦)。
划重点:非Chrome扩展的场景下,别想绕过浏览器的安全限制往Chrome商店页面塞外部脚本——这是浏览器的安全防护机制,就是用来防这种跨源脚本注入的。
内容的提问来源于stack exchange,提问作者philM
相关产品推荐
相关产品推荐

