跨域传值即主页面与iframe之间互相传值_javascript技巧
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了跨域传值即主页面与iframe之间互相传值_javascript技巧,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2681字,纯文字阅读大概需要4分钟。
内容图文
需求一:主页面A 怎么向 iframe B 传递数据呢?这种方式,是主页面需要给 iframe B 传递数据,然后 iframe B 获得到数据后进行特定的处理
实现方式
实现的技巧就是利用 location 对象的 hash 值,通过它传递通信数据,我们只需要在主页面A中设置 iframe B 的 src 后面多加个 #data 字符串(data就是你要传递的数据),如下图所示:
然后在 iframe B 中通过某种方式能即时的获取到这儿 data 就可以了,其实常用的一种方式就是:
1. 在 iframe B 中通过 setInterval 方法设置定时器, 监听 location.href 的变化即可获得上面的 data 信息
2. 然后 iframe B 就能根据这个 data 信息进行相应的逻辑处理
需求二:iframe B 怎么向 主页面A 传递数据呢?
这种方式,是 iframe B 需要给主页面传递数据,然后主页面根据获得到数据后进行特定的处理
实现方式
实现的技巧就是利用一个代理 IframeC,它嵌入到 iframe B 中,并且和主页面A必须保持是同域,然后我们通过它充分利用上面第一种通信方式的实现原理就能把 iframe B 的数据传递给 iframeC,接下来的问题就是怎么让iframeC把数据传递给主页面A ,如下图所示:
因为,iframeC 和主页面是同域的,所以它们之间传递数据就变得简单多了,我们这里的方式就是使用一个经常使用的属性 window.top (也可以使用window.parent.parent),它返回对载入浏览器得最顶层 window 对象的引用,这样我们就能直接条用主页面A中方法啦,哈哈哈,简单吧。
到此,我们做个简单分析总结
这种实现方式的前提也是最大的缺点就是 iframe 中的内容必须是我们可控的,但是至少我们这种实现方式是建立在浏览器的安全规则之上的,没有破坏应用本身的安全性。
实现时需要考虑的一些细节
尽量考虑到了易用,可扩展性和可维护性,比如:
让第三方 App 只需加载一个我们提供的JS种子文件就能很方便的使用我们为其提供的各种工具
上面的各种工具,我们采用包的形式进行组织,最大化的实现按需加载
第一条中的JS种子文件只提供基础的方法实现,并且把最常用的工具包放在里面,比如高度自适应
通过种子文件,我们还提供给第三方 App 一些常用的JS工具包,而且直接使用的类似YUI3模块的动态加载机制就可使用指定的工具包
对第三方 App 和 主页面传递的数据进行分类(自我调用,登录验证,传递数据等等)
传递的数据使用满足特定规范的JSON格式,并通过统一的服务出口发出去,主页面提供一个统一服务接口解析数据,并根据规范调用相应的方法
还有,就是版本控制的问题,为了尽量减少给第三方App带来影响,以上所有这些JS文件的版本都是采用向后兼容的策略,小版本使用服务器设置SQUID缓存特定频率的失效时间实现,大版本更新根据用户自己的需求手动更改
当然,以上可能不是最优的解决方案,只是希望能给你一些帮助和引导,我们也在逐步的改进我们的一些实现方式,比如版本控制这块儿,我们也有一些问题需要解决
具体的代码
主页面A的源码
Js代码
/*主页面A*/
内容总结
以上是互联网集市为您收集整理的跨域传值即主页面与iframe之间互相传值_javascript技巧全部内容,希望文章能够帮你解决跨域传值即主页面与iframe之间互相传值_javascript技巧所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。