在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该怎么办呢?

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

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

  2. 每个子页面在调用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]; }


总结:

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

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

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

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

另外:对于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交互并兼容各种浏览器的解决方案相关推荐

  1. 谷歌浏览器iframe兼容问题_Javascript iframe交互并兼容各种浏览器的解决方法

    在Web前端开发中,我们经常会用到iframe这个控件. 但是这个控在内.外交互时,往往各个浏览器所用的关键字不同,很是麻烦,为了能够得到子iframe中的window对象,各家浏览器有着各家的指定, ...

  2. 关于文件导出(下载)功能不兼容IE浏览器的解决方案

    关于文件导出(下载)功能不兼容IE浏览器的解决方案 参考文章: (1)关于文件导出(下载)功能不兼容IE浏览器的解决方案 (2)https://www.cnblogs.com/padaleidelei ...

  3. javascript 复制功能 兼容所有浏览器的解决方案

    代码如下: // 兼容所有浏览器function copyUrl(url) {if (navigator.userAgent.toLowerCase().indexOf('ie') > -1) ...

  4. 将内容复制到剪切板兼容主流浏览器的解决方案

    html : <body><div class="demo-area"><label for="copy-input">输入 ...

  5. Ueditor图片上传不能兼容微信浏览器的解决方案

    这个问题花了我两天时间才解决掉,因为在网上没有找到合适的方案,所以想写下来给大家分享下. 当时使用安卓和苹果手机上面的浏览器访问都可以正常使用,就是用微信扫一扫浏览时,图片上传功能死活不能用,后面各种 ...

  6. iframe交互问题,浏览器存在差异

    搞前端的都知道,iframe存在跨域访问的问题. 在不同浏览器中,google浏览器出于安全考虑,对于file协议有安全限制,无法用js访问本地资源. 为了说明不同浏览器间iframe访问的差异,我将 ...

  7. 分享一个帮助你自定义标签并且兼容现代浏览器的javascript类库 : X-tag

    为什么80%的码农都做不了架构师?>>>    日期:2012-6-26  来源:GBin1.com 今天我们介绍一个能够帮助你自定义标签的js类库:x-tag,使用这个类库可以快速 ...

  8. JavaScript 图片的上传前预览(兼容所有浏览器)

    功能描述 通过 JavaScript 实现图片的本地预览(无需上传至服务器),兼容所有浏览器(IE6&IE6+.Chrome.Firefox). 实现要点   ● 对于 Chrome.Fire ...

  9. javascript检测浏览器类型和版本号(兼容各浏览器)

    代码  1 from: http://www.webreference.com/tools/browser/javascript.html  2 http://browserspy.dk/browse ...

最新文章

  1. 直播|深大周池:跨数据中心的高效大图处理问题研究
  2. Spring MVC 搭建web项目示例
  3. JS,中文,未结束的字符常量
  4. Leetcode 55.跳跃游戏 (每日一题 20210706)
  5. 日历控件源码开放--适用于ASP.NET 1.1
  6. Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO
  7. my appointment Fiori customizing里的Calendar checkbox的实现逻辑
  8. linux编程手册读书笔记第一章(20140329)
  9. 如何进入指定文件目录_Python如何遍历操作指定文件目录下的全部Excel文件?
  10. gt designer2不能初始化字体管理器_Windows Terminal 1.1预览版发布:新增字体粗细、随开机启动等功能...
  11. (第七天)DOM练习一
  12. 疯狂的程序员 1-10
  13. VAssistX失效后重新安装双击没反应
  14. electron最小化托盘、禁用右键菜单
  15. java碳纤维山地车车架咋样_自行车碳纤维车架值得买吗?它有哪些优缺点?老骑手来给你答案!...
  16. 「现场参会攻略」| 2018AI in China之智能制造数据驱动产业变革高峰论坛
  17. 用word2vec解读延禧攻略人物关系
  18. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例
  19. 小程序中让后面的View覆盖到上一个view中
  20. 位图矢量化:Potrace的应用

热门文章

  1. [json]Json 入门
  2. HBase数据模型解析和基本的表设计分析
  3. oracle 判断非空字段
  4. Java Servlet Filter
  5. 多年心路历程见证从技术小白到收获BAT等大厂研发offer,分享一些经验和感悟...
  6. 论文阅读笔记:《Contextual String Embeddings for Sequence Labeling》
  7. maven2+依赖传递
  8. debian6 snmpd 安装配置
  9. Spring 源码分析(三) —— AOP(五)创建代理
  10. 4种常用压缩格式在hadoop中的应用