【发布时间】:2013-05-17 10:20:32
【问题描述】:
窗口关闭处理程序无法处理我在 Chrome 下的代码(我正在使用它的最新版本,26)
我有一个听Window.ClosingEvent 的课程。如果在用户上传文件时窗口正在关闭(关闭窗口,用户键入另一个 url...),应用程序会提示用户“您确定吗?”。
GWT 2.5.0 和 2.5.1 IExplorer 10 正常 火狐 21 正常 Opera 尚不支持该事件。 Chrome 26 不工作。
这是 GWT 代码:
public abstract class ActiveUploadTransitionController extends TransitionController implements ClosingHandler {
...
@Override
public void onWindowClosing(Window.ClosingEvent event){
if(showMessage()){
if(folder != null && folder.hasActiveFileUploads()){
event.setMessage(getUploadActiveLeavingMessage());
}
}
}
...
protected ActiveUploadTransitionController()
{
...
Window.addWindowClosingHandler(this);
...
}
}
以上代码在资源管理器、Firefox 中都能正常运行,所以我认为代码没问题。
有趣的是,如果我在 JavaScript 中实现一个独立的测试,它在 Explorer、Firefox 和 Chrome 浏览器中都能正常工作。
//JavaScript
var handler = function(e){
var show = true;
if(show){
var msg = "messageTest";
(e || window.event).returnValue = msg;
return msg;
}
return;
}
if(window.addEventListener){
window.addEventListener("beforeunload", handler);
}
因为孤立的 JavaScript 可以工作,我也尝试以原生方式实现它。同样的问题。适用于 IExplorer、FireFox 但不适用于 Chrome。
var handler = function (e) {
var showMessage = that.@com.skydox.client.home.ActiveUploadTransitionController::showMessage()();
if(showMessage){
var confirmationMessage = that.@com.skydox.client.home.ActiveUploadTransitionController::getUploadActiveLeavingMessage()();
(e || window.event).returnValue = confirmationMessage;
return confirmationMessage;
}
tmpBeforeUnload(e);
return;
}
if($wnd.addEventListener){
$wnd.onbeforeunload = handler;
}
这个问题让我抓狂。有什么想法吗?
谢谢各位!
【问题讨论】:
标签: javascript google-chrome gwt