Я пытаюсь установить глобальный прослушиватель событий клавиатуры на странице, состоящей из фреймов, и получаю странное поведение, когда начинаю печатать слишком рано.
Главная страница выглядит так:
<html>
<head>
<meta http-equiv = "content-type" content = "text/html; charset=UTF-8">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<title>My title</title>
</head>
<frameset rows = "*" cols = "250,*" framespacing = "3" frameborder = "yes" border = "1" class = "doc-result-frameset">
<frame src = "left.html" name = "info" id = "info" scrolling = "auto" class = "doc-result-frame-info">
<frame src = "right.html" name = "doc" id = "doc" class = "doc-result-frame-doc">
</frameset>
<noframes><body></body></noframes>
</html>
Правый фрейм - это страница, которая загружается намного дольше, чем левый фрейм. В левом кадре я пытаюсь добавить JavaScript для управления всей страницей.
Я написал следующее:
top.window.addEventListener("keydown",
function(event: KeyboardEvent) {handleKeyboardEvent(event, previous, next);},
true);
var topWindowFrames : Window = top.window.frames;
for (var i = 0; i < topWindowFrames.length; i ++) {
var frame : Window = topWindowFrames[i];
frame.onload = (function(frame: Window) {
return function() {
frame.document.addEventListener("keydown",
function(event: KeyboardEvent) {handleKeyboardEvent(event, previous, next);},
true);};
})(frame);
}
Я также пробовал не оборачивать frame.onload внутри другой функции, просто используя frame внутри кода.
Проблема, которую я получаю, заключается в том, что если я перезагружаю страницу и очень быстро нажимаю на правый фрейм, чтобы сфокусировать его и начать печатать, прослушиватель событий левого фрейма никогда не будет работать. И наоборот, если я жду, пока все загрузится, чтобы начать печатать или щелкать, все работает нормально.
Я не знаю, что пошло не так, потому что я не могу найти способ проверить, какие слушатели зарегистрированы для каждого кадра.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


запускать привязку слушателей событий через body.onLoad
<body onLoad = "bindEvents()">
Спасибо за Ваш ответ. Я попробую это. Я уже выполнил этот код в предложении
$(document).ready(). Как вы думаете, это изменит ситуацию?