通过<frameset>和<iframe>解析js中window对象parent、self、top的区别

本文深入解析了HTML中frameset、frame与iframe的使用方式与区别,详细展示了它们在页面嵌套与层次关系中的应用,并通过实例演示了不同HTML页面间数据获取的方法。

<frameset>、<frame>、<iframe>这3个html元素的区别,可以参考这篇文章"frame,iframe,frameset之间的关系与区别"。标准的使用方式如下:

  1. <!--iframe 是在html页面内嵌入框架框架内可以连接另一个页面-->  
  2. <html>  
  3. <head></head>  
  4. <body>  
  5. <iframe src="xxx.html"></iframe>  
  6. </body>  
  7. </html>  
  8.   
  9. <!--frameset在一个页面中设置一个或多个框架,不能嵌套在body标签里-->  
  10. <html>  
  11. <head></head>  
  12. <frameset>  
  13. <frame src=""></frame>  
  14. <frame src=""></frame>  
  15. </frameset>  
  16. </html>  

可以看到a.html能够通过<frameset>或者<iframe>包含另一个b.html,而b.html中也可以用同样的方式嵌套c.html。这样就在不同的html之间形成了明显的层次(父子)关系。我们知道每一个html都对应1个js的window对象,既然html有层次关系,window对象也同样有层次关系,而这层次关系就是通过top和parent、self这3个属性来表现的。


1.在任何html页面中(window.self == window),self和window都是获取当前窗口自身的window对象。

2.top用来获取最顶层的窗口对象,而parent只是获取当前窗口的父窗口。如果当前窗口是最顶层的窗口,那么window.parent == window.top == window.self。如果a.html-->b.html-->c,html通过<frameset>或者<iframe>形成了层次关系,那么在c.html中,window.parent获取的是b.html的窗口,window.top获取的是a.html的窗口。

3.通过<a>打开的页面和原来页面之前没有这种父子关系。


现在我们知道了html页面之间的这种层次关系,现在我们看下不同html之间如何获取彼此的数据。参考“在同一个页面中的一个iframe中用js获取另一个iframe的dom”这篇文章。

  1. main.html  
  2. <html>  
  3.     <script>  
  4.     function init()  
  5.     {  
  6.         var obj1=document.getElementById("myframe");  
  7.         alert(obj1.src);  
  8.         //alert(obj1.window.document.myform.username.value);//错误  
  9.           
  10.         var obj2=document.frames("myframe");  
  11.         alert(obj2.window.document.myform.username.value);  
  12.         //alert(obj2.src);//错误  
  13.     }  
  14.     </script>  
  15.     <body onload="init();">  
  16.         <iframe id="myframe" name="myframe" src="child.html" frameborder="3" style="width:300;height:200;">  
  17.         </iframe>  
  18.     </body>  
  19. </html>  
  20.   
  21. child.html  
  22. <html>  
  23.     <body>  
  24.         <form name="myform">  
  25.             用户名:<input type="text" name="username" value="test" />  
  26.         </form>  
  27.     </body>  
  28. </html>  
可以看到关键就是通过:window.document.getElementById()和window.document.frames获取<iframe>标签的属性,或者<iframe>标签加载的html页面的文档数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值