【发布时间】:2013-05-03 08:20:00
【问题描述】:
我很好奇以下情况是 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();
现在,我的 Chrome 扩展程序页面中添加了一个 iframe。它看起来像这样:
<iframe src="http://www.foo.com/123"></iframe>
此框架的 src 与我的内容脚本模式匹配。因此,当框架加载时,injectScript.js 会被注入其中。 但是injectScript里面的XMLHttpRequest失败了。
现在,这让我想知道预期的行为是什么。当我请求适当的权限时遇到 CORS 问题令人沮丧......但我也可以理解我正在尝试从我的 chrome 扩展之外的来源访问“http://www.bar.com/123”......尽管加载了一个 iframe我有权访问的扩展程序。
任何人对此事有何想法?
编辑:如果您想知道从实际的角度来看我能得到什么——我想注入一些可以在注入页面中的视频上调用 getImageData 的 javascript。但是,我不能,因为 getImageData 认为视频的 src 是受污染的数据。我已经请求了适当的权限,但它并没有渗透到 iframe 中。
更新:这是一张照片:http://i.imgur.com/PR48HO2.png
【问题讨论】:
-
我也面临同样的问题。我知道您已经弄清楚原因是什么,并在您的(不幸的)扩展中解决了它。您能否分享解决方案(也许自己添加一个答案)?
标签: google-chrome-extension cross-domain same-origin-policy