В этом подробно обсуждаются общие библиотеки на linux и влияние на производительность.
Я заставил это работать
<!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>
<!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>
<!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 объекта окна.
Далее следует ознакомиться с различными встроенными ссылками на окна в DOM при работе с наборами фреймов. Всего имеется 4
Итак, в основном то, что я сделал здесь, когда событие onload срабатывает в окне frame1, добавил функцию обработчика к событию keydown для документов в оба окна фрейма.
Эта функция использует закрытие, чтобы гарантировать, что событие, сгенерированное во фрейме 1, доступно фактическому обработчику, независимо от того, какое окно сгенерировало событие нажатия клавиши. Это необходимо из-за того, как IE обрабатывает события. В то время как другой браузер создает новые объекты событий по мере их возникновения и передает их обработчикам событий, IE просто изменяет глобальный объект события (ссылка на него осуществляется через window.event или, что проще, просто event ) на отражать текущее событие.
Надеюсь, это имеет смысл.
когда событие onload срабатывает в окне frame1, добавляется функция-обработчик к событию keydown для документов в обоих окнах фрейма.Эта функция использует закрытие, чтобы гарантировать, что событие, сгенерированное в frame1, доступно для фактического обработчик, независимо от того, в каком окне произошло событие нажатия клавиши. Это необходимо из-за того, как IE обрабатывает события. В то время как другой браузер создает новые объекты событий по мере их возникновения и передает их обработчикам событий, IE просто изменяет глобальный объект события (ссылка на него осуществляется через window.event или, что проще, просто event ) на отражать текущее событие.
Надеюсь, это имеет смысл.
когда событие onload срабатывает в окне frame1, добавляется функция-обработчик к событию keydown для документов в обоих окнах фрейма.Эта функция использует закрытие, чтобы гарантировать, что событие, сгенерированное в frame1, доступно для фактического обработчик, независимо от того, в каком окне произошло событие нажатия клавиши. Это необходимо из-за того, как IE обрабатывает события. В то время как другой браузер создает новые объекты событий по мере их возникновения и передает их обработчикам событий, IE просто изменяет глобальный объект события (ссылка на него осуществляется через window.event или, что проще, просто event ) на отражать текущее событие.
Надеюсь, это имеет смысл.
Эта функция использует закрытие, чтобы гарантировать, что событие, сгенерированное во фрейме 1, доступно фактическому обработчику, независимо от того, какое окно сгенерировало событие нажатия клавиши. Это необходимо из-за того, как IE обрабатывает события. В то время как другой браузер создает новые объекты событий по мере их возникновения и передает их обработчикам событий, IE просто изменяет глобальный объект события (ссылка на него осуществляется через window.event или, что проще, просто event ) на отражать текущее событие.
Надеюсь, это имеет смысл.
Эта функция использует закрытие, чтобы гарантировать, что событие, сгенерированное во фрейме 1, доступно фактическому обработчику, независимо от того, какое окно сгенерировало событие нажатия клавиши. Это необходимо из-за того, как IE обрабатывает события. В то время как другой браузер создает новые объекты событий по мере их возникновения и передает их обработчикам событий, IE просто изменяет глобальный объект события (ссылка на него осуществляется через window.event или, что проще, просто event ) на отражать текущее событие.
Надеюсь, это имеет смысл.
Если у вас возникли проблемы с чтением объекта события кадра, когда событие обрабатывается в другом кадре, вам придется ссылаться на него явно
var event = top.frames.BOTTOM.event;
Я столкнулся с этим проблема сама, и начало моего обработчика событий было
var myFrame = top.frames[0];
myFrame.onkeydown = keyboardHandler;
function keyboardHandler(e) {
if (!e && event) {
e = event; //For handling the event in IE
}
if (!e && myFrame.contentWindow.event) {
e = myFrame.contentWindow.event; //For handling event in IE6 from inside the iFrame
}
if (e) {
...
}
}