Javascript iframe交互并兼容各种浏览器的解决方法


Posted in Javascript onJuly 12, 2016

在Web前端开发中,我们经常会用到iframe这个控件。

但是这个控在内、外交互时,往往各个浏览器所用的关键字不同,很是麻烦,为了能够得到子iframe中的window对象,各家浏览器有着各家的指定,有的是window,有的是contentWindow等等也许还有我们不知道的。

但是从子页面访问父层页面,其本上大家都是window.parent就可以了。

那么通过这个特征,我们可以在子页面中,把自身的window对象传递给父页面就可以了,这样父页面就很轻松的访问子页面,再也不用靠虑如何从iframe对象上得到window对象了。

二话不说,我们先看代码:

父页面代码:

window.iframeWindow = null;
function frameReady(subWindow){
window.iframeWindow = subWindow; //赋值
}; 
<iframe src = "xx" ></iframe>

子页面代码:

$(function(){
window.parent.frameReady(window);
});

通过上面简单的代码,就可以在父页面中访问iframeWindow对象,直接得到了子页面的window对象,非常无脑也非常好用。

如果我有多个iframe该怎么办呢?

这种情况会稍微复杂一点,但是没关系。我们想继续使用上面的方案,就分析一下现状:

1.我们应该会需要一个类似iframeWindows的集合对象,用于管理所有子页面的window对象。

2.每个子页面在调用parent.frameReady时,必须靠诉父页面一个唯一名称,使得我们可以在父页面中对各个iframe进行精确访问

那么这下就简单了,子页面要做的事,无非就是一个名称、编号啥的,我们来看代码

window.subWindowName = "HelloWorldWindow";
$(function(){
window.parent.frameReady(window.subWindowName, window);
});

那么父页面要做的事就是重构frameReady并增加一个参数

window.iframeWindows = {}; //这里变成了一个对象
function frameReady(name, window){
window.iframeWindows[name] = window;
};
function getSubWindow(name){
return window.iframeWindows[name];
}

总结:

通过这种方案构建的页面存在以下优点:

1.父子页面的交互仅依赖于parent关键字(而以前的方式中,不仅依赖parent,还要依赖contentWindow、window等其它不确定关键字,最重要的是parent的支持还是非常好的)

2.window对象统一化,减少了每次使用时再请求的引用链,提高了运行的速度

3.最重要的一点:就是代码写起来轻松多了。

以上所述是小编给大家介绍的Javascript iframe交互并兼容各种浏览器的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
AngularJS实践之使用NgModelController进行数据绑定
Oct 08 Javascript
vue组件实例解析
Jan 10 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
javascript加减乘除的简单实例
Jul 12 #Javascript
浅谈javascript中的加减时间
Jul 12 #Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 #Javascript
基于BootStrap环境写jQuery tabs插件
Jul 12 #Javascript
Angular 路由route实例代码
Jul 12 #Javascript
javascript中获取class的简单实现
Jul 12 #Javascript
springMVC结合AjaxForm上传文件
Jul 12 #Javascript
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
session 的生命周期是多长
2006/10/09 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
javascript测试题练习代码
2012/10/10 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
原生js实现放大镜
2017/02/20 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
详解python单元测试框架unittest
2018/07/02 Python
transform python环境快速配置方法
2018/09/27 Python
django2.0扩展用户字段示例
2019/02/13 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
幼师专业求职推荐信
2013/11/08 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书