加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

js实现页面iframe弹窗提交信息并自动关闭思路

(2018-04-15 21:19:17)
标签:

iframe

跨域

通信

postmessage

表单

分类: 网站
需求源自一个客户,多渠道推广需要。因为渠道比较多,不能完全依靠商桥等媒介。咨询过某些客服系统,发下没有类似功能。

客户找了另一家的页面效果,是js直接页面动态插入from表单实现。直接拿到代码线上测试,发现会因为页面不同情况,有弹窗代码被页面本身css影响,导致弹窗样式错乱问题。第一版,如果用,必须让之后做单页的技术人员,避免css冲突。不实际,于是尝试改进。

第二种思路,采用iframe嵌入表单。当iframe表单信息提交后,本身进行页面特定元素标记,并且父页面创建轮训,检测iframe内标记情况,当检测到标记的时候,关闭iframe。思路是这样,但实际运行发下,因为跨域问题,执行并未达到想要的效果。

经过一番搜索,发现国外有两种解决跨域的思路。
1)利用hash-hack方式
该方式和思路二类似,同样是自身的标记。并未采用。
2)利用Window.postMessage(),进行iframe和父辈通信
window.postMessage() 方法可以安全地实现跨源通信。
通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机  (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。
以一种合适的方式,规避js不安全因素,达到页面间通信。

按照Window.postMessage()思路,消除了iframe跨域不安全限制问题。重新编写代码。运行测试可以正常使用。

iframe内,发出关闭命令部分代码
http://s7/mw690/001NIuQazy7jIvC2dx426&690


iframe父辈接收命令并移除iframe弹窗显示
http://s7/mw690/001NIuQazy7jIvC47j096&690


具体使用是需留意浏览器兼容性方面。

参考资源:
mozilla window.postMessage
Cross-Domain Iframe Resize
Hash-Hack for Cross-Domain IFrame Communication

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有