Апплет постоянно теряет фокус при выходе из браузера и возвращении - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть веб-страница с апплетом в качестве единственного элемента, который выглядит примерно так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <title>...</title>
</head>
<body>
<applet style="padding:1px; border:1px solid gray" mayscript="mayscript" codebase="..." name="AppletName" code="..." archive="..." width="600" height="500" alt="Alt Text">
  <param name="initial_focus" value="true"/> 
   Alt Text
</applet>
</body>
</html>

Когда страница изначально загружается, фокус устанавливается в апплете, и я могу перемещаться и взаимодействовать сапплет просто отлично.Однако, если я покину окно браузера и вернусь к нему, я больше не смогу снова сосредоточиться на апплете, просто используя клавишу табуляции.

Нажатие клавиши F5 для перезагрузки страницы исправляет страницу, так что апплет возвращаетсяфокус, но это решение неприемлемо.

Как мне решить эту проблему?Спасибо.

1 Ответ

0 голосов
/ 04 ноября 2010

Предварительное решение:

//Dean Edwards/Matthias Miller/John Resig
function init() {
  // quit if this function has already been called
  if (arguments.callee.done) return;

  // flag this function so we don't do the same thing twice
  arguments.callee.done = true;

  // kill the timer
  if (_timer) clearInterval(_timer);

  window.onfocus = function() {
    if(!document.AppletName.isActive())
      document.AppletName.requestFocus();
  };
}

/* for Mozilla/Opera9 */
if (document.addEventListener) {
  document.addEventListener("DOMContentLoaded", init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
  document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
  var script = document.getElementById("__ie_onload");
  script.onreadystatechange = function() {
    if (this.readyState == "complete") {
      init(); // call the onload handler
    }
  };
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
  var _timer = setInterval(function() {
    if (/loaded|complete/.test(document.readyState)) {
      init(); // call the onload handler
    }
  }, 10);
}

/* for other browsers */
window.onload = init;

Обратите внимание, что ключевая часть для определения того, нуждается ли апплет в фокусе, и запрос его в этом случае (это работает только при включенном mayscript):

if(!document.AppletName.isActive())
  document.AppletName.requestFocus();

Остальная часть кода просто прикрепляет окно к обработке фокуса после загрузки страницы (используя скрипт, основанный на JQuery.ready).

Лучшие решения приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...