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 动态调整图片尺寸实现代码
Dec 28 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
《JavaScript函数式编程》读后感
Aug 07 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
Aug 16 Javascript
Vue实现星级评价效果实例详解
Dec 30 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 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
用 php 编写的日历
2006/10/09 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
Bootstrap精简教程
2015/11/27 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
python daemon守护进程实现
2016/08/27 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python闭包思想与用法浅析
2018/12/27 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Python ellipsis 的用法详解
2020/11/20 Python
Django url 路由匹配过程详解
2021/01/22 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
幼儿园教师节演讲稿
2014/09/03 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
《学会看病》教学反思
2016/02/17 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL