Захватить нажатие клавиши в верхнем окне

Я пытаюсь зафиксировать событие onkeydown в окне, которое содержит iframe, содержащий несколько наборов кадров:

top.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title> top.html </title>
</head>
<body>
  <iframe frameborder="0" border="0" width="100%" height="100%" src="framset1.html" id="framset1"></iframe>
</body>

framset1.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>A frameset document</TITLE>
</HEAD>
  <FRAMESET rows="66,*" border="0">
      <FRAME scrolling="no" id="frame1" name="frame1" src="frame1.html">
      <FRAME id="framset2" name="framset2" src="framset2.html">
  </FRAMESET>
</HTML>

framset2.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>A frameset document</TITLE>
</HEAD>
  <FRAMESET cols="46,*" border="0">
      <FRAME scrolling="no" id="frame2" name="frame2" src="frame2.html">
      <FRAME id="frame3" name="frame3" src="frame3.html">
  </FRAMESET>
</HTML>

Я хочу зафиксировать событие onkeydown в кадре 3. Я нашел относительный вопрос о stackoverflow здесь, но применен безуспешно.

Должен ли я продолжать этот путь или кто-нибудь может мне помочь.

Спасибо.

Павел


person Paul Koenig    schedule 24.04.2011    source источник


Ответы (1)


Если вы хотите назначить прослушиватель событий в верхнем кадре (top.html):

document.getElementById('framset1').contentDocument.getElementById('framset2').contentDocumentcontentDocument.getElementById('framset3').contentDocument.addEventListener('keydown', function(e) {
  alert('keydown in frame 700');
}, false);

Это работает, только если все фреймы находятся в одном домене + порт. В противном случае вы получите исключение безопасности при попытке доступа к document.getElementById('framset1').contentDocument.

Но кадры внутри кадра внутри кадра ... Вы действительно этого хотите ??

person Rudie    schedule 25.04.2011
comment
Спасибо, Руди. Вы, конечно, правы ... кадры в кадрах в кадрах ... это уродливо. Я хочу добавить некоторые функции в это старое приложение. Разработка замены задерживается (чего я не разрабатываю). Мне нужно больше времени и средств на рефакторинг. Я не могу проголосовать за ваш ответ ... еще раз спасибо - person Paul Koenig; 25.04.2011