HTML-iframe 跨域提交的问题

发布于 2016-10-27 15:21:58 字数 698 浏览 1239 评论 2

在a.domain.com下a.html

<html>
<head>
</head>
<body>
<div id="p"></div>
</body>
</html>

然后用js动态生成p.innerHTML = '<iframe width="400" height="400" marginWidth=0 marginHeight=0 frameBorder=0 width="100%" scrolling="no" allowTransparency="true" src="b.domain.com/b.html"></iframe>'

b.html
<form id="form1" name="form1" target="login_ifr" action="c.domain.com/c.php" method="POST">
......
</form>
<iframe id="login_ifr" name="login_ifr" src="" width="0" height="0" frameborder="0" scrolling="no" style="display:none;"></iframe>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灵芸 2017-10-24 10:27:53

是不是第二次才报错?syntax error的详细错误是啥?
用appendChild试试:
var ifr='<iframe width="400" height="400" marginWidth=0 marginHeight=0 frameBorder=0 width="100%" scrolling="no" allowTransparency="true" src="b.domain.com/b.html"></iframe>';

document.getElementById('div#p').appendChild(ifr);

晚风撩人 2017-08-02 16:13:35

没有人回答呀,今天终于让我搞出来了,分享给大家。
这个问题主要是父窗口与iframe子窗口的通信问题,当在父窗口设置document.domain = 'domain.com';时导致无法正常和Iframe(也是同域下)进行通信,IE下抛出的错误是:拒绝访问,导致无法操作iframe中的内容。因为在父页面或在iframe页面中,只要设置了document.domain,无论是和当前域名相同还是根域名,均视为跨域,所以才会出现拒绝访问的错误。所以在父窗口和子窗口里设置一样的document.domain = 'domain.com';这个方只适用于当你知道iframe的src时。

如果你是动态创建iframe在ie下还是会出现“拒绝访问”,解决办法就是在被调用的iframe页面中设置一个脚本变量,然后在父页面中不停地去尝试获取这个值,什么时候获得到了,就停下来执行自己的业务逻辑。这是没办法的办法。

抛弃我上面提问的问题的方法,在页面A(http://a.domain.com/a.html )中动态创建一个 iframe,iframe的src指向页面B(http://b.domain.com/b.html ),然后在页面A中获取或更改页面B中的内容。

a.html代码:

<html>
<head>
<title>a.html</title>
</head>
<body>
<script type="text/javascript">
document.domain = 'domain.com';
var iframe = document.createElement("iframe");
iframe.src = 'http://b.domain.com/b.html';
iframe.id = 'login_ifr';
iframe.width =0;
iframe.height =0;
iframe.frameborder = 0;
iframe.name = 'login_ifr';
iframe.style.display="none";
document.body.appendChild(iframe);
window.frames.login_ifr.name = "login_ifr"; //这里主要是兼容其他浏览器,比如FF
if(/MSIE/i.test(navigator.userAgent)){ //判断如果是ie浏览器
var timer = setInterval(function(){
if(iframe.contentWindow.accessTmp){
clearInterval(timer);
document.regform.submit();
}
}, 100);
} else {
document.regform.submit();
}
</script>
<form id="regform" name="regform" target="login_ifr" action="http://c.domain.com/c.php" method="POST">
.....
</form>
</body>
</html>

b.html代码:

 <html>
<head>
<title>http://b.domain.com/b.html</title>
<script type="text/javascript">
document.domain = 'domain.com';
var accessTmp = true;
</script>
</head>
<body>
</body>
</html>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文