我很好奇以下情况是 Chrome 中的错误、按预期工作还是开发人员错误。
所以,我有一个扩展。在其 manifest.json 中,我请求两个站点的跨域权限:
"permissions": [
"http://www.foo.com/*",
"http://www.bar.com/*"
]
我还声明了一个内容脚本:
"content_scripts": [
{
"matches": ["http://www.foo.com/*"],
"js": ["injectedScript.js"]
}
]
因此,我表示我想将“injectedScript.js”注入所有 foo.com 域。“injectedScript.js”看起来像:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleStateChange; // Implemented elsewhere.
xhr.open("GET", 'http://www.bar.com/123'), true);
xhr.send();
现在,一个 iframe 已添加到我的 Chrome 扩展程序的页面中。它看起来像这样:
<iframe src="http://www.foo.com/123"></iframe>
此框架的 src 与我的内容脚本模式匹配。因此,当框架加载时,injectScript.js 会被注入其中。但是injectScript 里面的XMLHttpRequest 失败了。
现在,这让我想知道预期的行为是什么。当我请求适当的权限时遇到 CORS 问题令人沮丧......但我也可以理解我正在尝试从我的 chrome-extension 之外的来源访问“ http://www.bar.com/123 ” ...尽管 iframe 加载到我有权访问的扩展中。
任何人对此事有何想法?
编辑:如果您想知道从实际的角度来看我能得到什么——我想注入一些可以在注入页面中的视频上调用 getImageData 的 javascript。但是,我不能,因为 getImageData 认为视频的 src 是受污染的数据。我已经请求了适当的权限,但它并没有渗透到 iframe 中。
更新:这是一张图片:http: //i.imgur.com/PR48HO2.png