我需要什么:我想将脚本注入网页中显示的所有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中的域名是相同的。
答案 0 :(得分:0)
正如我在问题中所说,我的要求是将脚本注入每个子窗口(iframe)。
如果我们添加"all_frames":true
,那么Chrome浏览器会评估每个iframe上的内容脚本,它会解决我的要求。通过访问文档对象从内容脚本我注入脚本。
了解更多信息:access iframe content from a chrome's extension content script
注意:我仍然不知道为什么我会面临跨学问题。