我的计算机上有一个html页面(test.html
)(localhost)。在该页面上的iframe中,我已加载abc.example.com
。
我想从其他域abc.example.com
访问iframe xyz.example.com
的内容。这是我到目前为止所尝试的:
//test.html in abc.example.com
<input type="textbox" />
<input type="submit" value="click_me" />
//Start.html in xyz.example.com
<script type="text/javascript">
$(document).ready(function() {
$("#ok").click(function() {
//using javascript
var oo = document.getElementById("myFrame");
document.getElementById("divFrame").innerHTML =
oo.contentWindow.document.body.innerHTML;
});
});
</script>
<iframe id="myFrame" src="http://localhost/exam/test.html"></iframe>
<div id="divFrame"></div>
<input type="submit" id="ok" />
但是当我按下“确定”按钮时,它会抛出"Access is Denied"
错误。使用jQuery模拟iframe中的点击时,我也会遇到同样的错误:
var btn = window.frames[0].document.getElementsByName('click_me');
btn[0].click();
答案 0 :(得分:4)
在JavaScript中,您无法访问其他域上的框架。它被称为Same origin Policy。例如,如果允许,您可以打开一个隐藏的框架来加载Facebook和谷歌+并窃取每个人的信息!
在某些情况下,存在围绕相同原始策略的方法,但您需要明确地将域列入白名单。就像使用Cross-origin resource sharing时一样。因此,动态(AJAX / XMLHTTPRequest)可以从另一个域获取数据,但您也必须控制另一个域。