`
A牛哥哥
  • 浏览: 147548 次
社区版块
存档分类
最新评论
阅读更多
页面上多个frame 嵌套, 怎样取各frame中的值呢?


假设A页面中引入了B, C两个页面, A页面如下:
<frameset rows=”20,*”>
	<frame src=”B.html” name=”b” id=”b”>
	<frame src=”C.html” name=”c” id=”c”>
</frameset>



1, 要在C.html中用js代码获取B.html的<input type=”text” id=”xx”/>的值怎么做?
首先要明白, 此时浏览器展现给我们的页面是3个页面组成的, 这其中就有3个window对象和3个document对象, 现在要获取B页面中的东西, 就要先得到B的window, 再得到B的document对象, 这样就可以操作B页面中的元素了,问题变成了怎么在C中得到B的window呢?
这些window对象是有层级关系的, A是父窗口, 它有B和C两个子window, B,C是兄弟关系, 我不知道能不能直接获取兄弟frame, 反正我查了资料没有找到, 但可以由C-->A-->B的方式获取, 即通过父窗口作为过渡:
C页面中获取B页,面window的代码如下:
<script language=”….”>
   var a = window.parent; //获取A的window对象
   var b = a.frames[“b”]; // A有两个子window, 根据frame的name获得指定的子窗口
   var doc = b.document; //获取到b窗口的document对象
   // 接下来就可以使用b窗口的document对象来操作B.html了
   alert(doc.getElementById(“xx”).value);
</script>


注意: var b = a.frames[“b”]是通过frame的name值获取,如果页面中有多个frameset时,即如下这种情况在IE和chrome上可能获取不到:
<frameset rows=”20,*” name="one">
	<frame src=”top.html” name=”top”>
	<frameset cols="20,*" name="two">
             <frame src="left.html" name="left">
             <frame src="right.html" name="right">
        </frameset>
</frameset>

这中情况下, 如果right.html中想获取top.html中的内容,用window.parent.parent.frames["top"]获取top所对应的window对象在IE和chrome中不可以,但可以用window.parent.parent.frames[0]获取,IE,FireFox,chrome都可以, 因为window.parent.parent得到的是name="one"的frameset, 它有两个window子对象,索引为0的就是top.

如果frameset的层级很多, 不知道要用几个parent才能到达,可以用IE的开发人员工具调试js代码, 选中window.parent.parent点击右键, 添加监控, 在右侧会出现它的值,依次展开找到document-->body-->innerHTML的值,看这个值你就知道当前的parent已经到哪个frameset了.
记得是IE浏览器, 我这里其余浏览器里只能找到document,找不到body和innerHTML


2,你能实现点击B.html中的按钮改变name=”c” 的frame的src属性吗?
<script>
    var a = window.parent; //得到A的window
    a.document.getElementById(“c”).src=”你的值”; //两个frame标签是A的东西
</script>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics