jQuery与原生JS操作iframe的方法及跨窗口通信详解

作者:木棉

时间:2026-10-28

浏览:318

本文总结了利用jQuery和原生JavaScript操作iframe的多种方法。涵盖在父窗口与子窗口中相互选中元素、修改属性及获取内容的具体代码示例,并详细解析了通过window.frames、parent及top对象实现多层级框架引用的原理与语法,帮助开发者高效处理复合文档中的页面交互。

文章目录

jQuery与原生JS操作iframe的方法及跨窗口通信详解

在构建复合文档时,iframe是常见的组件。借助jQuery库来操作iframe,可以显著提升开发效率。本文整理了几种基础且实用的操作方式。

DOM与jQuery基础操作对比

首先介绍原生DOM层面的操作方法:若需在父窗口中操作指定的iframe,可通过 window.frames["iframeSon"].document 获取其文档对象;反之,若在iframe内部需要操作父窗口,则使用 window.parent.document 即可。

接着看jQuery的实现方式:在父窗口中,若要选中iframe内的所有文本输入框,代码为 $(window.frames["iframeSon"].document).find(":text"); 而在iframe内部,若要选中父窗口的所有文本输入框,则使用 $(window.parent.document).find(":text");。

iframe HTML结构示例

示例中iframe框架的HTML结构如下:<iframe src="test.html" id="iframeSon" width="700″ height="300″ frameborder="0″ scrolling="auto"></iframe>

父子窗口单选按钮选中示例

第一种场景:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");

第二种场景:在iframe内部操作,选中父窗口中所有的单选按钮。jQuery代码如下:$(window.parent.document).find("input[@type='radio']").attr("checked","true");

对应上述操作的iframe框架HTML结构为:<iframe src="test.html" id="iframe1″ width="700" height="300" frameborder="0″ scrolling="auto"></iframe>

完整jQuery操作代码示例

具体实现代码如下:

<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<MCE:SCRIPT mce_src="js/jquery-1.2.6.js" src="../js/jquery-1.2.6.js" type="text/ecmascript"></MCE:SCRIPT>
<MCE:SCRIPT type="text/javascript"><!--
$(function(){
$("#t1").hover(function(){alert('');});
//$("iframe").contents().find("body").append("I'm in an iframe!");
//$(window.frames["iframe1"].document).find("input[@type='text']").attr("size","30px");
//$("#iframe1").contents().find("#d1").css('color','red');
//$(window.frames["iframe1"].document).find("input[@name='t1']").css({background:"#369"});
//$("#iframe1").src("test.html");
         });     
// --></MCE:SCRIPT>
<DIV>
<INPUT id=t1>
<IFRAME id=iframe1 src="child.htm" mce_src="child.htm"></IFRAME>
<IFRAME height=100 src="child.htm" width=300 mce_src="child.htm"></IFRAME>
</DIV>
<DIV>
</DIV>

以上为收集利用Jquery取得iframe中元素的几种方法总结。

获取iframe body内容的方法

以下代码展示了如何获取iframe中body元素的内容:$(document.getElementById('iframeId').contentWindow.document.body).htm() 以及 $(document.getElementById('iframeId').contentWindow.document.body).htm()

上述代码的功能是显示iframe中body元素的内容。

获取iframe内特定ID元素的方法

另一种获取iframe内特定元素的方法:$("#testId", document.frames("iframename").document).html(); 以及 $("#testId", document.frames("iframename").document).html();

该方法的目的是根据iframe的名称(iframename)取得其中ID为"testId"的元素。

等效的jQuery写法为:$(window.frames["iframeName"].document).find("#testId").html() 以及 $(window.frames["iframeName"].document).find("#testId").html()

其作用与前述方法相同。以下是从网络收集的一些示例代码:

iframe获取父窗口元素的技巧

关于如何在iframe中获取父窗口的特定元素值,通常需要结合DOM方法与jQuery方法来实现。

示例1:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");

示例2:在iframe内部操作,选中父窗口中所有的单选按钮。jQuery代码如下:$(window.parent.document).find("input[@type='radio']").attr("checked","true");

对应的iframe框架HTML结构为:<iframe src="test.html" id="iframe1" width="700" height="300" frameborder="0" scrolling="auto"></iframe>

上述代码已在IE7环境中测试通过。

多iframe场景下的jQuery操作

接下来介绍使用jQuery操作iframe的其他场景。

场景1:页面中包含两个iframe。

HTML结构如下:<iframe id="leftiframe"...</iframe> 和 <iframe id="mainiframe..</iframe>

在leftiframe中,使用jQuery修改mainiframe的src属性,代码为:$("#mainframe",parent.document.body).attr("src","https://www.jb51.net")

场景2:页面中包含一个ID为mainiframe的iframe,该iframe内部包含一个ID为someID的div元素,结构如下:<iframe id="mainifame"...></ifame> 和 <div id="someID">you want to get this content</div>。目标是获取someID的内容。

获取someID内容的jQuery代码为:$("#mainiframe").contents().find("someID").html() 或者 $("#mainiframe").contains().find("someID").text()。

场景3:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");

若要选择特定ID的元素,同样使用find方法,代码为:$(window.frames["iframe1"].document).find("#id")

如前例所示,在leftiframe中,使用jQuery操作mainiframe内someID的内容。代码为:$("#mainframe",parent.document.body).contents().find("someID").html() 或者 $("#mainframe",parent.document.body).contents().find("someID").val()。

原生JavaScript框架引用机制

此外,还可以使用JavaScript直接操纵iframe。

这里重点讲解框架间的互相引用机制。

页面中的所有框架以集合形式作为window对象的属性提供,例如window.frames表示该页面内所有框架的集合。这与表单、链接、图片等对象的集合类似,不同之处在于这些集合是document的属性。因此,引用子框架的语法如下:

window.frames集合与引用语法

window.frames["frameName"];

或者 window.frames.frameName

也可以写作 window.frames[index]

其中,window关键字可以用self代替或省略。假设frameName是页面中的第一个框架,以下写法是等价的:

self.frames["frameName"]

self.frames[0]

frames[0]

frameName

每个框架都对应一个独立的HTML页面,因此它也是一个独立的浏览器窗口,具备窗口的所有特性。所谓引用框架,实际上就是对window对象的引用。通过这个window对象,可以方便地操作其中的页面,例如使用window.document对象写入数据,或使用window.location属性改变框架内的页面。

下面分别介绍不同层次框架间的互相引用方法:

多层级框架引用详解

1.从父框架到子框架的引用

基于上述原理,从父框架引用子框架变得非常简单,即:

window.frames["frameName"];

这样就引用了页面内名为frameName的子框架。如果要引用子框架内的子框架(即二级子框架),根据框架引用即window对象引用的性质,可以实现如下:

window.frames["frameName"].frames["frameName2"];

这样就引用到了二级子框架,以此类推,可以实现多层嵌套框架的引用。

子框架到父框架的引用

2.从子框架到父框架的引用

每个window对象都有一个parent属性,表示它的父框架。如果该框架已经是顶层框架,则window.parent还表示该框架本身。

兄弟框架间的引用

3.兄弟框架间的引用

如果两个框架同为一个父框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用。例如一个页面包括2个子框架:

<frameset rows="50%,50%">

<frame src="1.html" name="frame1" />

<frame src="2.html" name="frame2" />

</frameset>

在frame1中可以使用如下语句来引用frame2:

self.parent.frames["frame2"];

不同层次框架间的互相引用

4.不同层次框架间的互相引用

框架的层次是相对于顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在的层次和名字,利用框架引用的window对象性质,可以很容易地实现互相访问。例如:

self.parent.frames["childName"].frames["targetFrameName"];

对顶层框架的引用与判断

5.对顶层框架的引用

与parent属性类似,window对象还有一个top属性。它表示对顶层框架的引用,这可以用来判断一个框架自身是否为顶层框架。例如:

//判断本框架是否为顶层框架

if(self==top){

//dosomething

}

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章