访问iframe contentDocument属性时出现跨源框架问题

时间:2016-01-08 05:47:41

标签: javascript security iframe google-chrome-extension

我需要什么:我想将脚本注入网页中显示的所有iframe(窗口)(作为我的chrome扩展开发的一部分)。

这样做的时候我正在访问iframe元素的contentDocument属性,导致下面提到的错误。

错误:Error: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "xxx.com" from accessing a cross-origin frame. at Error (native) at checkLoaded (chrome-extension://hkdhfkdhfkdhfkdhfkdhfkdhkdkd/js/app.js:152:33)

我知道我们无法访问具有不同域的元素或框架。但在我的情景中并非如此。

我是如何验证的:

Protocol = https (Not able mention it as part of URLs as stackoverflow is not allowing me do so)

iframe.src = xxx.com/dfg/rty?id=50061000000pOCB&isdtp=vw&inCon…85f85811b751bf4b4a18b5e&IFrameOrigin=https%3A%2F%2Fxxx

iframe.ownerdocument.location.origin = xxx.com

根据以上信息,我们可以理解iframe及其父文档都具有相同的域名。

然后我检查了文档域我执行脚本的位置(chrome扩展内容脚本页面),因为内容脚本与web页面共享相同的文档我获得了相同的域名(xxx.com),但内容 - 脚本网址不同(chrome-extension://kfhdkfdhfildfldf/js/app.js)。这样做会导致问题。

任何人都可以试着解释一下为什么跨域问题正在发生,尽管iframe中的域名是相同的。

1 个答案:

答案 0 :(得分:0)

正如我在问题中所说,我的要求是将脚本注入每个子窗口(iframe)。

如果我们添加"all_frames":true,那么Chrome浏览器会评估每个iframe上的内容脚本,它会解决我的要求。通过访问文档对象从内容脚本我注入脚本。

了解更多信息:access iframe content from a chrome's extension content script

注意:我仍然不知道为什么我会面临跨学问题。