iframe框架讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq877507054/article/details/71747146

iframe在复合文档中经常用到,这里收集一些基本操作,需要的朋友可以参考

JS获取并操作iframe中元素的方法

对框架的应用

 

框架间的互相引用

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

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

}


对框架内容的操作

 

1IE专用(通过frames索引形象定位)

document.frames[i].document.getElementById('元素的ID');

2IE专用(通过iframe名称形象定位)

document.frames['iframename'].document.getElementById('元素的ID');

以上方法,不仅对iframe适用,对frameset里的frame也同样适用。IE虽然擅于自定标准,但不得不说它很多的设计还是比较体现人性化的。比如这个,它在同样支持下面的标准路径之外,提供了一个简洁且形象化的写法。

 

3、通用方法:

document.getElementById('iframeID').contentWindow.document.getElementById('元素的ID')

注意要加上contentWindow,往往出现问题都是因为这个容易被忽略,它代表frameiframe内部的窗口对象。

<script type="text/javascript">

function getIframeContent(){  //获取iframe中文档内容

 var doc;

 if (document.all){ // IE

  doc = document.frames["MyIFrame"].document;

 }else{ // 标准

  doc = document.getElementById("MyIFrame").contentDocument;

 }

 return doc.body.innerHTML;

}

</script>

注意:上面的 .contentDocument 相当于 .contentWindow.document

实践

一、需求与遇到的问题

  在网站的后台管理中使用了iframe框架布局,包括顶部菜单、左侧导航和主页面。需求是:点击主页面上的一个按钮,在顶部菜单栏的右侧显示“退出”链接,点击可退出系统。

  我的思路是:在顶部的菜单页面放一个不可见的“退出”链接,当用户点击位于iframe中的主页面(mainPage.htm)中的按钮时,在顶部菜单页面的右侧显示“退出”。

我现在遇到的问题是:如何在页面的一个iframe子页面(mainPage.htm)中获取并且操作其它iframe子页面(比如topPage.htm)中的HTML元素?

二、通过JS获取并操作iframe中的元素来解决问题

  这里主要就是通过JS来操作Window对象。Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

  经过我在网上查资料,找到了JS操作iframeHTML元素的方法。示例如下。

  

   function ShowExit() {

          //获取iframewindow对象

          var topWin = window.top.document.getElementById("topNav").contentWindow;

          //通过获取到的window对象操作HTML元素,这和普通页面一样

          topWin.document.getElementById("exit").style.visibility = "visible";

     }

说明:第一步,通过window.top.document.getElementById("topNav")方法获取了顶部菜单页面(topPage.htm)所在的iframe对象;第二步,通过上一步获取到的iframe对象的contentWindow属性得到了iframe中元素所在的window对象;第三步,通过上一步获取到的window对象来操作iframe框架中的元素,这和操作不在iframe框架中的普通HTML元素是一样的。

jquery获取并操作iframe中元素的方法

在父窗口中操作 选中IFRAME中的所有输入框: 

$(window.frames["iframeSon"].document).find(":text");

IFRAME中操作 选中父窗口中的所有输入框:

$(window.parent.document).find(":text");

 

iframe框架的HTML

<iframe src="test.html" id="iframeSon" width="700height="300frameborder="0scrolling="auto"></iframe>

其他

//打开一个tab

top.window.outerFrame.ifm_main.addTab(" 持仓套保业务申请(查看)", url);

 

猜你喜欢

转载自blog.csdn.net/qq877507054/article/details/71747146
今日推荐