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 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
javascript的函数作用域
Nov 12 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
javascript学习小结之prototype
Dec 03 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
Jan 14 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
Apr 25 Javascript
Node.js Buffer用法解读
May 18 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
js canvas实现俄罗斯方块
Oct 11 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
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
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php检测文本的编码
2015/07/26 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Python龙贝格法求积分实例
2020/02/29 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Python编写万花尺图案实例
2021/01/03 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
教育专业自荐书范文
2013/12/17 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
保证书格式
2015/01/16 职场文书
高一军训决心书
2015/02/05 职场文书