Javascript iframe交互并兼容各种浏览器的解决方案
在Web前端开发中,我们经常会用到iframe这个控件。
但是这个控在内、外交互时,往往各个浏览器所用的关键字不同,很是麻烦,为了能够得到子iframe中的window对象,各家浏览器有着各家的指定,有的是window,有的是contentWindow等等也许还有我们不知道的。
但是从子页面访问父层页面,其本上大家都是window.parent就可以了。
那么通过这个特征,我们可以在子页面中,把自身的window对象传递给父页面就可以了,这样父页面就很轻松的访问子页面,再也不用靠虑如何从iframe对象上得到window对象了。
二话不说,我们先看代码:
父页面代码:
window.iframeWindow = null;
functionframeReady(subWindow){window.iframeWindow = subWindow; //赋值 };
<iframe src = "xx" ></iframe>
子页面代码:
$(function(){window.parent.frameReady(window);
});
通过上面简单的代码,就可以在父页面中访问iframeWindow对象,直接得到了子页面的window对象,非常无脑也非常好用。
如果我有多个iframe该怎么办呢?
这种情况会稍微复杂一点,但是没关系。我们想继续使用上面的方案,就分析一下现状:
我们应该会需要一个类似iframeWindows的集合对象,用于管理所有子页面的window对象。
每个子页面在调用parent.frameReady时,必须靠诉父页面一个唯一名称,使得我们可以在父页面中对各个iframe进行精确访问
那么这下就简单了,子页面要做的事,无非就是一个名称、编号啥的,我们来看代码
window.subWindowName = "HelloWorldWindow";
$(function(){window.parent.frameReady(window.subWindowName, window);
});
那么父页面要做的事就是重构frameReady并增加一个参数
window.iframeWindows = {}; //这里变成了一个对象
functionframeReady(name, window){window.iframeWindows[name] =window;
};
functiongetSubWindow(name){ returnwindow.iframeWindows[name]; }
总结:
通过这种方案构建的页面存在以下优点:
父子页面的交互仅依赖于parent关键字(而以前的方式中,不仅依赖parent,还要依赖contentWindow、window等其它不确定关键字,最重要的是parent的支持还是非常好的)
window对象统一化,减少了每次使用时再请求的引用链,提高了运行的速度
最重要的一点:就是代码写起来轻松多了。
另外:对于window.subWindowName的构建方式很多,这个即可以写死,也可以通过父层页面的src利用url传递进来。怎么使用就看自己的需求了。
原文地址 http://www.zizhusoft.com/note/show.aspx?id=14520a63-c7e8-42e9-a87e-77aec7adab0a 。
转载于:https://www.cnblogs.com/guofei0925/p/5662518.html
Javascript iframe交互并兼容各种浏览器的解决方案相关推荐
- 谷歌浏览器iframe兼容问题_Javascript iframe交互并兼容各种浏览器的解决方法
在Web前端开发中,我们经常会用到iframe这个控件. 但是这个控在内.外交互时,往往各个浏览器所用的关键字不同,很是麻烦,为了能够得到子iframe中的window对象,各家浏览器有着各家的指定, ...
- 关于文件导出(下载)功能不兼容IE浏览器的解决方案
关于文件导出(下载)功能不兼容IE浏览器的解决方案 参考文章: (1)关于文件导出(下载)功能不兼容IE浏览器的解决方案 (2)https://www.cnblogs.com/padaleidelei ...
- javascript 复制功能 兼容所有浏览器的解决方案
代码如下: // 兼容所有浏览器function copyUrl(url) {if (navigator.userAgent.toLowerCase().indexOf('ie') > -1) ...
- 将内容复制到剪切板兼容主流浏览器的解决方案
html : <body><div class="demo-area"><label for="copy-input">输入 ...
- Ueditor图片上传不能兼容微信浏览器的解决方案
这个问题花了我两天时间才解决掉,因为在网上没有找到合适的方案,所以想写下来给大家分享下. 当时使用安卓和苹果手机上面的浏览器访问都可以正常使用,就是用微信扫一扫浏览时,图片上传功能死活不能用,后面各种 ...
- iframe交互问题,浏览器存在差异
搞前端的都知道,iframe存在跨域访问的问题. 在不同浏览器中,google浏览器出于安全考虑,对于file协议有安全限制,无法用js访问本地资源. 为了说明不同浏览器间iframe访问的差异,我将 ...
- 分享一个帮助你自定义标签并且兼容现代浏览器的javascript类库 : X-tag
为什么80%的码农都做不了架构师?>>> 日期:2012-6-26 来源:GBin1.com 今天我们介绍一个能够帮助你自定义标签的js类库:x-tag,使用这个类库可以快速 ...
- JavaScript 图片的上传前预览(兼容所有浏览器)
功能描述 通过 JavaScript 实现图片的本地预览(无需上传至服务器),兼容所有浏览器(IE6&IE6+.Chrome.Firefox). 实现要点 ● 对于 Chrome.Fire ...
- javascript检测浏览器类型和版本号(兼容各浏览器)
代码 1 from: http://www.webreference.com/tools/browser/javascript.html 2 http://browserspy.dk/browse ...
最新文章
- 直播|深大周池:跨数据中心的高效大图处理问题研究
- Spring MVC 搭建web项目示例
- JS,中文,未结束的字符常量
- Leetcode 55.跳跃游戏 (每日一题 20210706)
- 日历控件源码开放--适用于ASP.NET 1.1
- Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO
- my appointment Fiori customizing里的Calendar checkbox的实现逻辑
- linux编程手册读书笔记第一章(20140329)
- 如何进入指定文件目录_Python如何遍历操作指定文件目录下的全部Excel文件?
- gt designer2不能初始化字体管理器_Windows Terminal 1.1预览版发布:新增字体粗细、随开机启动等功能...
- (第七天)DOM练习一
- 疯狂的程序员 1-10
- VAssistX失效后重新安装双击没反应
- electron最小化托盘、禁用右键菜单
- java碳纤维山地车车架咋样_自行车碳纤维车架值得买吗?它有哪些优缺点?老骑手来给你答案!...
- 「现场参会攻略」| 2018AI in China之智能制造数据驱动产业变革高峰论坛
- 用word2vec解读延禧攻略人物关系
- 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例
- 小程序中让后面的View覆盖到上一个view中
- 位图矢量化:Potrace的应用