我有一个网页,其中applet是唯一看起来像这样的元素:
<!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>
当页面最初加载时,焦点在applet中设置,我可以选中并与applet进行交互。但是,如果我离开浏览器窗口然后再回到它,我就不能再使用tab键重新关注applet了。
按F5重新加载页面会修复页面,以便Applet重新获得焦点,但此解决方案是不可接受的。
我该如何解决这个问题?感谢。
答案 0 :(得分:0)
暂定解决方案:
//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;
请注意,用于检测applet是否需要关注并且如果是这样请求它的关键部分(这仅在启用mayscript时有效):
if(!document.AppletName.isActive())
document.AppletName.requestFocus();
其余代码只是在页面加载后附加焦点处理窗口(使用JQuery.ready基于脚本)。
欢迎更好的解决方案。