300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 通过伪协议解决父页面与iframe页面通信的问题【javascript】

通过伪协议解决父页面与iframe页面通信的问题【javascript】

时间:2019-07-19 21:59:55

相关推荐

通过伪协议解决父页面与iframe页面通信的问题【javascript】

web前端|js教程

伪协议,父页面,iframe,页面通信

web前端-js教程

我们经常会有父页面与iframe页面的操作,比如

php 汽车 源码,vscode dos,ubuntu 翻译软件,tomcat .延时,sqlite支持索引,云服务器独立ip,插件博客,前端使用什么框架,爬虫工具写生,php返回信息,seo培训地址,用织梦怎么修改网站首页商品顺序,网页实现玫瑰花飘落效果,仿简书模板,phpcms 404页面,连锁会员管理系统源码,实现http代理服务程序lzw

网站缩短源码,vscode调试时出错,ubuntu sh -c,tomcat部署启动不了,sqlite3应用栅格地图,消杀下水道小爬虫的方法,php 截取字符串函数,团队实力强seo公司,旅游网站管理系统毕业设计与论文,成功页面模板lzw

这个iframe里面的内容是js写的。如以下代码

试玩任务平台源码,ubuntu驱动如何更新,怎么看tomcat的日志,网络爬虫包括,php青少年卓越计划高中,南京seo建站lzw

var iframe = document.getElementById("iframe"), doc = iframe.contentWindow.document;doc.open();doc.write("---------something------");doc.close();

以上代码在大多数情况下是对的。但有种情况,即父页面显式的写了document.domain = “xxx”;

在ie系列(IE10没试过)会出现没权限的错误。 而在firefox, chrome都没问题.

这是为什么呢?这是ie的一个bug, 即父页没有显式的设置document.domain时,iframe会默认document.domain与父页面一致,即都是

location.host,父子页面是可以进行通信,即文章头的例子, 但当父页面显式的设置了document.domain=””, iframe里面的页面必须也显式的设置document.domain=”xxx”,否则是

没有权限得到iframe.contentWindow.document的, 即也没办法去动态写内容,其实也可以让iframe指向一个特定的页面,这个页面显式的设置document.domain=”xxx”,再通过文章开头的方

的方式来写,但问题是我的父页面有很多这样的iframe,个数是未知的(都是广告位),所以也不能通过特定页面。

这样问题就来了,在这种情况下,我们貌似没有办法

1. 父页面设置了并且必须会显式的设置document.domain

2.iframe页面的内容需要js动态生成。

3.没有机会为iframe设置src。

但上面3个条件都满足时,我们可以通过伪协议来解决此类的问题。

iframe.src="javascript:void((function(){var d=document;d.open();d.domain=xxx;d.write(---something);d.close()})())";

通过这种方式可以显式的设置iframe的document.domain与父页面一致。

这样写了后,的确实现了动态写iframe内容的需求,但这个页面会单独弹出来,像window.open();

这是为什么呢? 这也是ie系列的bug ,即父页面有, 通过iframe的伪协议所写的内容会类似window.open一样弹出新页面,

但父页面的又必须是_self, 所以只能在调用iframe.src之前将base的target设置为_self, 内容写完后,再将base的target设为_blank

这样就解决了此问题。

虽然伪协议可以解决此问题,但也有些风险,如果不到万不得已,也别随便用这种方式。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。