我正在尝试自动与我无法控制的网站进行互动。特别是对于本次讨论,该网站的页面包含几个iframe。例如,考虑虚构(但可比较)页面https://www.chicken.com/a/b/hamburger.aspx的来源,如下所示:
<html>
...
<iframe id="iframe_a" src="meatloaf.aspx"></iframe>
<iframe id="iframe_b" src="stuffing.aspx"></iframe>
...
</html>
值得注意的是,iframe的'src'属性是相对的,因此它们将从原始域加载(在本例中为www.chicken.com/a/b/)并且似乎没有任何属性'同源'问题,因为我可以登录网站并与之交互就好了。但是,当我尝试使用Chrome开发者控制台与iframe进行互动时,这一切都会发生变化。例如,当我尝试使用jQuery获取其中一个iframe的内容时会发生这种情况:
$('#iframe_a').contents()
jquery-1.11.3.min.js:2 Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "https://www.chicken.com" from accessing a cross-origin frame.(…)
我的(错误)直觉是因为这些iframe的源与原始页面的域名相同,所以控制台中的javascript交互应该在原始域的主持下,一切都应该没问题。但显然我并不了解同源的细微差别。在这种情况下,有人可以告诉我它是如何工作的吗?也许建议一种从正在运行的浏览器中操纵这个iframe的内容的方法吗?