JS中获取和操作iframe

一、需求与遇到的问题

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

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

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

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

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

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

1         function ShowExit() {
2             //获取iframe的window对象
3             var topWin = window.top.document.getElementById("topNav").contentWindow;
4             //通过获取到的window对象操作HTML元素,这和普通页面一样
5             topWin.document.getElementById("exit").style.visibility = "visible";
6         }

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

  下面是我在重现以及解决这个问题时写的全部代码(布局太丑,但重点是JS方法):

  1.使用iframe框架布局的顶级页面(JS操作iframe中的元素.htm)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>JS操作iframe中的元素</title>
 5     <style type="text/css">
 6         #topDiv
 7         {
 8             width: 100%;
 9             height: 100px;
10             background: #b6b6b6;
11             border-top: 0px;
12         }
13         #topNav
14         {
15             width: 100%;
16             border: 0px;
17             margin-top: 45px;
18         }
19         #middleDiv
20         {
21             width: 100%;
22             height: 360px;
23             border-top: 10px solid #fff;
24         }
25
26         #leftNav
27         {
28             float: left;
29             width: 10%;
30             height: 360px;
31             background: #b6b6b6;
32             border: 0px;
33         }
34
35         #mainContent
36         {
37             float: right;
38             height: 360px;
39             width: 89%;
40             border: 0px;
41             margin-left: 10px;
42         }
43
44         #bottomDiv
45         {
46             width: 100%;
47             float: left;
48         }
49
50         #bottomNav
51         {
52             clear: both;
53             margin: 0;
54             padding: 0;
55             width: 100%;
56             height: 46px;
57             background: #b6b6b6;
58             border: 0px;
59             border-top: 10px solid #fff;
60             border-bottom: 10px solid #fff;
61         }
62     </style>
63 </head>
64 <body>
65     <div id="topDiv">
66         <iframe id="topNav" src="topPage.htm"></iframe>
67     </div>
68     <div id="middleDiv">
69         <div id="leftDiv">
70             <iframe id="leftNav" src="LeftPage.htm"></iframe>
71         </div>
72         <div id="mainDiv">
73             <iframe id="mainContent" src="mainPage.htm"></iframe>
74         </div>
75     </div>
76     <div id="bottomDiv">
77         <iframe id="bottomNav" src="bottomPage.htm"></iframe>
78     </div>
79 </body>
80 </html>

  2.顶部菜单栏页面(topPage.htm)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>顶部导航</title>
 5     <style type="text/css">
 6         ul
 7         {
 8             list-style-type: none;
 9             float: left;
10             padding: 0px;
11             margin: 0px;
12             width: 100%;
13             text-align: center;
14             margin: 0px auto;
15         }
16         a
17         {
18             text-decoration: none;
19             color: White;
20             background-color: Purple;
21             border: 1px solid white;
22             float: left;
23             width: 7em;
24             padding: 0.2em 0.6em;
25             font-weight: bold;
26         }
27         a:hover
28         {
29             background-color: #ff3300;
30         }
31         li
32         {
33             display: inline;
34         }
35         #exit
36         {
37             float: right;
38             visibility: hidden;
39         }
40     </style>
41 </head>
42 <body>
43     <ul>
44         <li><a href="#">文章管理</a></li>
45         <li><a href="#">会员管理</a></li>
46         <li><a href="#">系统管理</a></li>
47         <li id="exit"><a href="#">退出</a></li>
48     </ul>
49 </body>
50 </html>

  3.左侧导航栏(leftPage.htm)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>左侧导航</title>
 5     <style type="text/css">
 6         ul
 7         {
 8             list-style-type: none;
 9             float: left;
10             margin: 5px;
11             padding:5px;
12         }
13         a
14         {
15             text-decoration: none;
16             color: White;
17             background-color: Purple;
18             border: 1px solid white;
19             width: 7em;
20             padding: 0.2em 0.6em;
21             font-weight: bold;
22         }
23         a:hover
24         {
25             background-color: #ff3300;
26         }
27     </style>
28 </head>
29 <body>
30     <div>
31         <ul>
32             <li><a href="#">栏目一 </a></li>
33             <li><a href="#">栏目二</a></li>
34             <li><a href="#">栏目三</a></li>
35         </ul>
36     </div>
37 </body>
38 </html>

  4.需要访问顶部菜单页面元素的主页面(mainPage.htm)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <style type="text/css">
 6         body
 7         {
 8             background-color: #B9E5FB;
 9         }
10     </style>
11     <script type="text/javascript">
12         function ShowExit() {
13             //获取iframe的window对象
14             var topWin = window.top.document.getElementById("topNav").contentWindow;
15             //通过获取到的window对象操作HTML元素,这和普通页面一样
16             topWin.document.getElementById("exit").style.visibility = "visible";
17         }
18     </script>
19 </head>
20 <body>
21     <div>
22         <input type="button" name="btnOk" value="在顶端显示退出" onclick="ShowExit();" />
23     </div>
24 </body>
25 </html>

  5.底部页面(bottomPage.htm)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>底部页面</title>
 5 </head>
 6 <body>
 7     <div>
 8         底部版权区:这是一个底部的测试页面
 9     </div>
10 </body>
11 </html>
时间: 2024-08-08 19:00:28

JS中获取和操作iframe的相关文章

js中的二进制操作相关类型和方法

Blob数据对象 MDN官方解释Blob对象:一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并不一定得是JavaScript中的原生形式.File接口基于Blob, 继承了Blob的功能,并且扩展支持了用户计算机上的本地文件. 创建Blob对象的方法有几种,可以调用Blob构造函数,还可以使用一个已有Blob对象上的slice()方法切出另一个Blob对象,还可以调用canvas对象上的toBlob方法. 实际上,Blob是计算机通用术语之一,全称写作:BLOB(b

JS中获取 DOM 元素的绝对位置实例详解

在操作页面滚动和动画时经常会获取 DOM 元素的绝对位置,例如 本文 左侧的悬浮导航,当页面滚动到它以前会正常地渲染到文档流中,当页面滚动超过了它的位置,就会始终悬浮在左侧. 本文会详述各种获取 DOM 元素绝对位置 的方法以及对应的兼容性.关于如何获取 DOM 元素高度和滚动高度,请参考视口的宽高与滚动高度 一文. 概述 这些是本文涉及的 API 对应的文档和标准,供查阅: API 用途 文档 标准 offsetTop 相对定位容器的位置 MDN CSSOM View Module clien

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

Rest中获取制定操作的UriTemplate

1 UriTemplate uri = WebOperationContext.Current.GetUriTemplate("DownloadFile"); Rest中获取制定操作的UriTemplate,码迷,mamicode.com

60秒验证码倒计时js代码 js样式代码 方块上下左右随机移动(定时器) js中获取元素的方法 js中表单提交

60秒验证码倒计时js代码 <script type="text/javascript"> var countdown=60; function settime(val) { if (countdown == 0) { //removeAttribute() 方法删除指定的属性. disabled属性规定应该禁用 input 元素. val.removeAttribute("disabled"); val.value="免费获取验证码"

js中获取URL中指定的查询字符串

js中获取URL中指定的搜索字符串,主要利用location对象实现,废话少说,上代码. 1 function getSearchString(key) { 2 // 获取URL中?之后的字符 3 var str = location.search; 4 str = str.substring(1,str.length); 5 6 // 以&分隔字符串,获得类似name=xiaoli这样的元素数组 7 var arr = str.split("&"); 8 var ob

js中获取键盘事件

1 <script type="text/javascript" language=JavaScript charset="UTF-8"> 2 document.onkeydown=function(event){ 3 var e = event || window.event || arguments.callee.caller.arguments[0]; 4 if(e && e.keyCode==27){ // 按 Esc 5 //要

JS中获取数据库中的值

在本次项目中,遇到很多问题,经过努力,都逐步得到解决.静下心来,做一个记录,以供以后学习. 在项目中遇到一个问题,需要在JS中读取数据库中的值,然后再把值返回到页面中,解决方案如下:使用Ajax方法来实现,需要用到ajax.dll(一个ajax技术开发的帮助类库). 实施过程如下: 1.引用Ajax.dll 2.在App_Code写具体的方法,最好单独建立一个类文件,然后写具体方法. public class AjaxMethod www.2cto.com { public AjaxMethod

小程序 js中获取时间new date()的用法(网络复制过来自用)

js中获取时间new date()的用法 获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();