窗口关闭处理程序无法处理Chrome下的代码(我在上一个版本,26)
我有一个听Window.ClosingEvent
的课程。如果在用户上传文件时关闭窗口(关闭窗口,用户键入另一个URL ...),应用程序会提示用户“你确定吗?”。
GWT 2.5.0和2.5.1 IExplorer 10好的 Firefox 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工作,我也尝试以本机方式实现它。一样的问题。适用于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;
}
这个问题让我发疯。任何想法的人?
谢谢大家!
答案 0 :(得分:0)
我发现了同样的问题。非常令人沮丧。
此网站为大多数浏览器提供了良好的workarounds。
为Chrome提供的方法会引发“你确定吗?”关闭窗口的用户对话框。它需要这样做才能可靠地获取onClose事件。在此之前需要进行任何密切处理,但如果用户点击“否”,页面/应用仍然需要运行。
答案 1 :(得分:0)
我怀疑问题与您的其他逻辑有关,而不是Chrome的onbeforeunload
行为。要验证这一点,请对onbeforeunload处理程序进行硬编码以返回字符串:
$wnd.onbeforeunload = function() { return "Are you sure?" };
确保实际调用了您的JSNI方法(在浏览器控制台中检查window.onbeforeunload以验证是否实际添加了处理程序。)