摘要:今天填了一个利用嵌套页面传递消息的坑。原传递消息举例页面页面以上页面为父页面,为中新增的方法,可以实现跨文档消息传输。返回窗口中所框架或。消息传递给页面后,接收信息用触发事件就可以接收接收的信息,具体信息在里面。
今天填了一个h5利用iframe嵌套页面传递消息的坑。
原iframe传递消息举例
js1.html页面:
js2.html页面:
以上js1页面为父页面,postMessage为HTML5中新增的postMessage方法,postMessage可以实现跨文档消息传输。
window.frames 返回窗口中所框架或
不过!
坑来了。
嵌入的页面不止一个iframe!页面里添加了360和QQ的插件,两个插件在页面里动态添加了N个iframe,造成了js冲突,js2页面没有收到消息。
例如:
js1.html页面:
js2.html页面:
以上,js4、js5、js6页面好比如为其他插件加载的iframe,我的js2一下就被顶的不知道加载到第几位去了,笨方法可以frames.length看看有几个框架,然后window.frames[N]一个个试,不过缺点是不稳定,兼容性太差了。那么上网查一下window.frames[N]其实是可以指定选择框架的。
给自己的iframe加一个ID,window.frames[ID]就能指定加载js2的iframe。
但是!!非IE内核下window.frames["child"].postMessage(“XXXX”),失败了!!!提示postMessage未定义!!!what f**k,什么鬼,这么皮。
打印一下 window.frames["child"]就会发现,返回的是dom对象。。所以不会有postMessage方法,更改之后改为window.frames["child"].contentWindow,用contentWindow把iframe的信息专换成window对象,这样以后加载多少iframe都不怕了。
最终改进版即为:
js1.html页面:
js2.html页面:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/107310.html
摘要:跨域访问的处理办法及适用条件适用条件请求的接口需要支持访问这里需要强调的是,不属于的部分,它只是把放入标签中实现的数据传输,不受同源策略限制。 为什么会有跨域问题 我们试想一下以下几种情况: 我们打开了一个天猫并且登录了自己的账号,这时我们再打开一个天猫的商品,我们不需要再进行一次登录就可以直接购买商品,因为这两个网页是同源的,可以共享登录相关的 cookie 或 localStor...
阅读 1255·2021-10-08 10:05
阅读 4066·2021-09-22 15:54
阅读 3084·2021-08-27 16:18
阅读 3082·2019-08-30 15:55
阅读 1405·2019-08-29 12:54
阅读 2726·2019-08-26 11:42
阅读 526·2019-08-26 11:39
阅读 2080·2019-08-26 10:11