在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. 最重要的一点:就是代码写起来轻松多了。

另外:对于window.subWindowName的构建方式很多,这个即可以写死,也可以通过父层页面的src利用url传递进来。怎么使用就看自己的需求了。


原文地址 http://www.zizhusoft.com/note/show.aspx?id=14520a63-c7e8-42e9-a87e-77aec7adab0a 。

最新文章

  1. python之numpy
  2. 利用DelegatingHandler实现Web Api 的Api key校验
  3. 使用proguard混淆java web项目代码
  4. bnu24252 海盗分赃
  5. insert into select 与select into from -- sql 批量插入
  6. ClassPathXmlApplicationContext的启动
  7. [algothrim]URL相似度计算的思考
  8. MultiTouch camera controls source code
  9. 在 Java 中高效使用锁的技巧--转载
  10. php study plan personal
  11. 关于.NET,.NET Framework 和ASP.NET的总结
  12. access 随机选取数据
  13. 双击更新所有已安装的python模块
  14. C语言之循环次数
  15. 二、urllib进阶
  16. How Microservices are Transforming Python Development
  17. js判断时间段
  18. Kubernetes系列之监控Metres-server实战篇
  19. OpenCV imread读取jpg图像的一个大坑
  20. python split 的应用

热门文章

  1. 模块:jquery实现表格的隔行换色
  2. linux下根据进程名字获取PID,类似pidof(转)
  3. get------引用接口
  4. 王爽 &lt;&lt;汇编 语言&gt;&gt; 13.6 BIOS中断例程应用
  5. 学习css中得与惑
  6. 初识linux端c++程序开发
  7. javascript中call函数与apply
  8. 用Windows PowerShell 控制管理 Microsoft Office 365
  9. jquery&#39;中的匿名函数
  10. Android 启动模式及常用的Intent的Flag