窗口关闭处理程序无法在Chrome下运行我的代码(我使用的是最新版本,26)
我有一个监听Window.ClosingEvent的类。如果在用户上载文件时关闭窗口(关闭窗口,用户键入另一个url...)应用程序会提示用户“你确定吗?”
GWT2.5.0和2.5.1 IExplorer 10 ok Firefox 21 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实现一个独立的测试,它在资源管理器、火狐和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;
}这个问题快把我逼疯了。伙计们,你们知道吗?
谢谢大家!
发布于 2013-08-19 19:15:58
我也发现了同样的问题。非常令人沮丧。
这个站点为大多数浏览器提供了很好的workarounds。
为Chrome提供的方法会抛出一个“你确定吗?”当用户关闭窗口时,会显示一个对话框。它需要这样做才能可靠地获取onClose事件。任何关闭处理都需要在此之前完成,因此如果用户单击“否”,页面/应用程序仍需要运行。
https://stackoverflow.com/questions/16606690
复制相似问题