通过<frameset>和<iframe>看JavaScript中window对象parent、self、top的区别
<frameset>、<frame>、<iframe>这3个html元素的区别,可以参考这篇文章"frame,iframe,frameset之间的关系与区别"。标准的使用方式如下:
<!--iframe 是在html页面内嵌入框架框架内可以连接另一个页面--> <html> <head></head> <body> <iframe src="xxx.html"></iframe> </body> </html> <!--frameset在一个页面中设置一个或多个框架,不能嵌套在body标签里--> <html> <head></head> <frameset> <frame src=""></frame> <frame src=""></frame> </frameset> </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”这篇文章。
main.html <html> <script> function init() { var obj1=document.getElementById("myframe"); alert(obj1.src); //alert(obj1.window.document.myform.username.value);//错误 var obj2=document.frames("myframe"); alert(obj2.window.document.myform.username.value); //alert(obj2.src);//错误 } </script> <body onload="init();"> <iframe id="myframe" name="myframe" src="child.html" frameborder="3" style="width:300;height:200;"> </iframe> </body> </html> child.html <html> <body> <form name="myform"> 用户名:<input type="text" name="username" value="test" /> </form> </body> </html>可以看到关键就是通过:window.document.getElementById()和window.document.frames获取<iframe>标签的属性,或者<iframe>标签加载的html页面的文档数据。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。