Я получил это на работу
frameset.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>
frame1.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>
frame2.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 ) просто добавляет ненужный потенциал ошибок. Вот почему мой скрипт явно просматривает коллекцию frames объекта window.
Далее следует ознакомиться с различными встроенными ссылками на окна в DOM при работе с наборами кадров. Всего 4
- window - Текущее окно. Это также подразумевается, когда не учтено (т.е. window.onload === onload)
- parent - родительское окно для текущего
- top - Самое верхнее окно в семействе фреймов. parent === top , если у вас только один набор фреймов.
- self - псевдоним window
Итак, в основном, что я сделал здесь, когда событие onload срабатывает в окне frame1, это добавление функции обработчика к событию keydown для документов в обоих окнах frame.
Эта функция использует замыкание, чтобы гарантировать, что событие, сгенерированное в frame1, доступно фактическому обработчику, независимо от того, какое окно генерирует событие keydown. Это необходимо из-за того, как IE делает события. В то время как другие браузеры создают новые объекты событий по мере их возникновения и передают их обработчикам событий, IE просто изменяет глобальный объект события (на который ссылаются через window.event или более просто, просто event ), чтобы отражать текущее событие.
Надеюсь, это имеет смысл.