Javascript GWT:windowClosing处理程序在chrome中未正确处理

Javascript GWT:windowClosing处理程序在chrome中未正确处理,javascript,google-chrome,gwt,Javascript,Google Chrome,Gwt,窗口关闭处理程序无法处理我在Chrome下的代码(我使用的是它的最新版本,26) 我有一个类可以监听窗口。ClosingEvent。如果在用户上载文件时关闭窗口(关闭窗口,用户键入另一个url…),应用程序将提示用户“确定吗?” GWT 2.5.0和2.5.1 IExplorer 10正常 Firefox21 ok Opera还不支持该活动。 Chrome 26不工作 以下是GWT代码: public abstract class ActiveUploadTransitionController

窗口关闭处理程序无法处理我在Chrome下的代码(我使用的是它的最新版本,26)

我有一个类可以监听
窗口。ClosingEvent
。如果在用户上载文件时关闭窗口(关闭窗口,用户键入另一个url…),应用程序将提示用户“确定吗?”

GWT 2.5.0和2.5.1 IExplorer 10正常 Firefox21 ok 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;
}
这个问题让我抓狂。有什么想法吗,伙计们


谢谢大家

我发现了同样的问题。非常令人沮丧

这个网站为大多数浏览器提供了很好的服务


Chrome提供的方法会在用户关闭窗口时弹出一个“确定吗?”对话框。它需要这样做才能可靠地获取onClose事件。但在此之前需要完成任何关闭处理,因此,如果用户单击“否”,页面/应用程序仍需要运行。

我怀疑问题在于您的其他逻辑,而不是Chrome的
onbeforeuload
行为。要验证这一点,请硬编码onbeforeunload处理程序以返回字符串:

 $wnd.onbeforeunload = function() { return "Are you sure?" };
并确保确实调用了JSNI方法(在浏览器控制台中检查window.onbeforeunload,以验证是否实际添加了处理程序)