在Web前端开发中,咱们常常会用到iframe这个控件。前端
可是这个控在内、外交互时,每每各个浏览器所用的关键字不一样,非常麻烦,为了可以获得子iframe中的window对象,各家浏览器有着各家的指定,有的是window,有的是contentWindow等等也许还有咱们不知道的。浏览器
可是从子页面访问父层页面,其本上你们都是window.parent就能够了。url
那么经过这个特征,咱们能够在子页面中,把自身的window对象传递给父页面就能够了,这样父页面就很轻松的访问子页面,不再用靠虑如何从iframe对象上获得window对象了。spa
二话不说,咱们先看代码:code
父页面代码:对象
window.iframeWindow = null; function frameReady(subWindow){ window.iframeWindow = subWindow; //赋值 };
<iframe src = "xx" ></iframe>
子页面代码:blog
$(function(){ window.parent.frameReady(window); });
经过上面简单的代码,就能够在父页面中访问iframeWindow对象,直接获得了子页面的window对象,很是无脑也很是好用。开发
这种状况会稍微复杂一点,可是不要紧。咱们想继续使用上面的方案,就分析一下现状:get
咱们应该会须要一个相似iframeWindows的集合对象,用于管理全部子页面的window对象。iframe
每一个子页面在调用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]; }
经过这种方案构建的页面存在如下优势:
父子页面的交互仅依赖于parent关键字(而之前的方式中,不只依赖parent,还要依赖contentWindow、window等其它不肯定关键字,最重要的是parent的支持仍是很是好的)
window对象统一化,减小了每次使用时再请求的引用链,提升了运行的速度
最重要的一点:就是代码写起来轻松多了。
另外:对于window.subWindowName的构建方式不少,这个便可以写死,也能够经过父层页面的src利用url传递进来。怎么使用就看本身的需求了。
原文地址 http://www.zizhusoft.com/note/show.aspx?id=14520a63-c7e8-42e9-a87e-77aec7adab0a 。