问题:用户从小程序开始长时间操作;显示带有进度条的JDialog。用户打开/切换到另一个浏览器选项卡-仍然显示JDialog(并惹恼用户)。
当用户切换到另一个选项卡时,JDialog应该被隐藏;并在用户切换回时再次显示。
注意:我看到了类似问题的问题,解决方案是添加windowActivated / deactivated监听器。它对我不起作用,因为窗口中有多个框架,其中一个框架包含applet。当用户单击另一个框架时,将强制执行windowDeactivate事件,但用户仍在同一选项卡中。
解决方案:将侦听器添加到所有帧
<head>
...
<script type="text/javascript">
onBlur=function(event) { window.focusFlag = false; };
onFocus=function(event){ window.focusFlag = true; };
function createFocusListeners()
{
window.focusFlag = true;
if (/*@cc_on!@*/false) { // check for Internet Explorer
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else if (typeof window.addEventListener != "undefined"){
document.getElementById('topFrame').contentWindow.addEventListener('focus',onFocus, false);
document.getElementById('topFrame').contentWindow.addEventListener('blur',onBlur, false);
document.getElementById('leftFrame').contentWindow.addEventListener('focus',onFocus, false);
document.getElementById('leftFrame').contentWindow.addEventListener('blur',onBlur, false);
document.getElementById('mainFrame').contentWindow.addEventListener('focus',onFocus, false);
document.getElementById('mainFrame').contentWindow.addEventListener('blur',onBlur, false);
window.addEventListener('focus',onFocus, false);
window.addEventListener('blur',onBlur, false);
}
};
//main frame is constantly reloaded, must add listener after each reload
window.createMainFrameFocusListeners = (function () {
if (typeof window.addEventListener != "undefined"){
document.getElementById('mainFrame').contentWindow.addEventListener('focus',onFocus, false);
document.getElementById('mainFrame').contentWindow.addEventListener('blur',onBlur, false);
}
});
</script>
</head>
<frameset rows="32,*" cols="*" onload="createFocusListeners();">
<frame id="topFrame" src="MenuFrame.jspx" name="topFrame" scrolling="NO" noresize="noresize"/>
<frameset rows="*" cols="280,*">
<frame id="leftFrame" src="TreeFrame.jspx" name="leftFrame" scrolling="NO"/>
<frame id="mainFrame" src="ListView.jspx" name="mainFrame" scrolling="NO"/>
</frameset>
</frameset>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句