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 相关文章推荐
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
Sep 09 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
微信小程序通过保存图片分享到朋友圈功能
May 24 Javascript
JavaScript中import用法总结
Jan 20 Javascript
vue项目打包上传github并制作预览链接(pages)
Apr 19 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
使用React代码动态生成栅格布局的方法
May 24 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
新版PHP将向Java靠拢
2006/10/09 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
小程序实现搜索框
2020/06/19 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
法院先进个人事迹材料
2014/05/04 职场文书
田径运动会通讯稿
2014/09/13 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
Go语言应该什么情况使用指针
2021/07/25 Golang