我得到了这个工作
框架集.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Test</title>
</head>
<frameset rows="50%,50%">
<frame src="frame1.html" name="TOP">
<frame src="frame2.html" name="BOTTOM">
</frameset>
</html>
框架1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Frame 1</title>
<script type="text/javascript">
onload = function()
{
top.frames.BOTTOM.document.onkeydown =
self.document.onkeydown = function( evt )
{
return function()
{
// Just an example to show it's working
document.getElementById( 'output' ).value += String.fromCharCode( evt.keyCode );
}
}( window.event );
}
</script>
</head>
<body>
frame1
<textarea id="output"></textarea>
</body>
</html>
框架2.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Frame 2</title>
</head>
<body>
frame2
<textarea></textarea>
</body>
</html>
首先,对您的对象引用相当明确总是值得的。使用专有的 DOM 快捷方式(例如window.frameName)只会增加不必要的错误可能性。这就是为什么我的脚本显式查看窗口对象的框架集合的原因。
接下来是在处理框架集时熟悉 DOM 中的各种内置窗口引用。共有4个
- window - 当前窗口。省略时也暗示了这一点(即,window.onload === onload)
- parent - 当前的父窗口
- top - 框架集系列中最顶层的窗口。 当您只有一个框架集时,parent === top 。
- 窗口的自别名
所以基本上我在这里所做的是,当 onload 事件在 frame1 窗口中触发时,为两个框架窗口中的文档的 keydown 事件添加一个处理函数。
该函数使用闭包来确保 frame1 中生成的事件可用于实际处理程序,而不管哪个窗口生成了 keydown 事件。这是必要的,因为 IE 如何处理事件。其他浏览器在事件发生时创建新的事件对象并将它们传递给事件处理程序,而 IE 只是修改全局事件对象(通过window.event或更简单的事件引用)以反映当前事件。
我希望这是有道理的。