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

标签 javascript google-chrome gwt

窗口关闭处理程序在我的 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);
...
}
}

以上代码在 Explorer、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 有效,所以我也尝试以 native 方式实现它。一样的问题。适用于 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;
}

这个问题让我抓狂。伙计们有什么想法吗?

谢谢大家!

最佳答案

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

本站报价不错workarounds对于大多数浏览器。

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

关于javascript - GWT:windowClosing 处理程序未在 chrome 中正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16606690/

相关文章:

javascript - knockout.js observable 仅在数组推送时更新

javascript - 运行正则表达式替换,同时忽略(但保留)某个字符

javascript - 将 header 授权设置为 Angular $http post

除非我刷新,否则 JavaScript/Coffeescript 不会执行

java - 通过 Java 关闭 Mac OS X 上的 Google Chrome

gwt - 在 GWT 中永久缓存图像

JavascriptObject 到字符串 gwt

jquery - 如何在 Chrome 扩展程序弹出窗口显示后触发事件?

google-chrome - Sencha Touch 应用程序中的 Google Chrome 浏览器上的滚动条无法正常工作

GWT UIBinder 选项卡面板