窗口关闭处理程序在我的 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/