Javascript GWT:windowClosing处理程序在chrome中未正确处理
窗口关闭处理程序无法处理我在Chrome下的代码(我使用的是它的最新版本,26) 我有一个类可以监听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
窗口。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,以验证是否实际添加了处理程序)