Javascript iframe交互并兼容各种浏览器的解决方案

在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 。

时间: 2024-12-11 01:51:48

Javascript iframe交互并兼容各种浏览器的解决方案的相关文章

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

html : <body> <div class="demo-area"> <label for="copy-input">输入要复制到剪切板的文字:</label><br> <textarea id="copy-input" cols="30" rows="10"></textarea><br> <but

兼容各种浏览器下调用iframe里面的函数

<script type="text/javascript"> var o = $(window.frames["menu"])[0].contentWindow; </script> <!-- <![endif]--> <!--[if IE]> <script type="text/javascript"> var o = window.frames["menu&quo

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

功能描述 通过 JavaScript 实现图片的本地预览(无需上传至服务器),兼容所有浏览器(IE6&IE6+.Chrome.Firefox). 实现要点   ● 对于 Chrome.Firefox.IE10 使用 FileReader 来实现. ● 对于 IE6~9 使用滤镜 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader 来实现. <!DOCTYPE html> <html> <head>

javascript 兼容各个浏览器的事件

调用事件: //事件对象//什么是事件对象?在触发dom上的事件是都会产生一个事件对象event.例如鼠标点击的时候,自己就会产生比如点击的类型啊 还要那个元素发出的//dom 事件对象   type 属性用于获取事件对象, target属性 用于获取事件目标,stopPropagation()方法 阻止事件冒泡 preventDefault阻止事件的默认行为//IE中的事件对象  type 属性 用于获取事件对象, srcElement属性 用于获取事件目标 cancelBubble属性  用

javascript iframe 操作(一)

[兼容所有浏览器 包括IE7/8/9] 1.父页面中获取IFRAME的WINDOW对象 获得了window对象后,就可以调用iframe页面中定义的方法等. IE:可以通过iframeId.window.iframeId.window.iframeName.window.frames[iframeId].window.frames[iframeName].window.frames[iframeIndex]和iframeElement.contentWindow这6种方法来获取iframe的wi

【ActionScript】Flash与网页的交互,ActionScript与JavaScript的交互

Flash是可以轻松与网页交互数据的,不然为何Flash会有这么大的生命力呢?仅仅是这样编程比較麻烦而已,又要调试Flash,然后又要放到server上调试. 只是这种方式可以收到非常好的效果.Flash强大的画图功能.图形功能,可以与网页的參数传递联系起来,配合后端的server语言,可以收到非常大效果. 以下举个样例用ActionScript3.0来说明这个问题,例如以下图: IE6效果: 火狐效果: 一旦浏览器装上Flash插件,Flash就行轻松与网页互通消息. 不管在不论什么浏览器,如

CSS兼容各浏览器的hack

CSS兼容各浏览器的hack:建议:尽可能的手写代码,可以有效的提高学习效率和深度.浏览器的种类多,麻烦自然也多,主要是各种浏览器对某些属性的渲染效果并不相同,所以有时候需要专门针对特定浏览器或者特定版本书写CSS代码,这样就需要用到所谓的“CSS Hack”,下面以一段实例的形式介绍一下个浏览器hack. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content

OPENCART之兼容多种浏览器的加入收藏夹扩展功能插件(CROSS-BROWSER BOOKMAR

OPENCART之兼容多种浏览器的加入收藏夹扩展功能插件(CROSS-BROWSER BOOKMARK) 由于安全原因,谷歌浏览器chrome不允许使用javascript代码加入收藏夹,本插件在谷歌浏览器浏览网站时,给出按Ctrl + D来收藏您的网址. 特色: 1. 适用于多种浏览器版本: IE5+/Win, Firefox, Netscape 6+, Opera 7+, Safari, Google Chrome for Windows, Konqueror 3, IE5/Mac, iCa

css样式兼容不同浏览器问题解决办法

在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网站,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所有浏览器 通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 *+height: 100px; IE7.FF 共用 height: 100px !important; 一.CSS HACK 1, !important