我不确定这是 Javascript 问题还是 Vaadin 问题,所以我认为最好在这里提问,而不是在 Vaadin 论坛上提问。
为了在浏览器关闭时(如果可能)立即清理资源,我在我的 Vaadin 应用程序中添加了以下代码:
JavaScript.getCurrent().addFunction("catchClose", new JavaScriptFunction() {
private static final long serialVersionUID = 1L;
@Override
public void call(JSONArray arguments) throws JSONException {
VaadinSession.getCurrent().close();
/*causes detach() to be called which does all my cleanup*/
}
});
Page.getCurrent().getJavaScript().execute(
"window.addEventListener('beforeunload', "
+ "function() {"
+ "var e = window.event;"
+ "e.returnValue = '';"
+ "catchClose(); "
+ "return '';"
+ "}, false);"
);
我也尝试过直接设置 onbeforeunload 函数,而不是像Vaadin 论坛上的这篇文章中提到的那样添加事件监听器。
在 Firefox 中,这按预期工作,事件被发送回服务器,不会显示询问用户是否要离开页面的提示。就是让他们离开。
但是,在 IE 10(和 Chrome,但现在只有 IE 10 相关)中,仍然会发送消息,这会关闭我的 Vaadin 会话,但会要求用户确认他们是否要离开。由于我已经关闭了会议,如果他们选择留下,这显然会引起一些大问题。
根据onbeforeunload 事件的 IE 文档,如果我返回空值,则不应弹出对话框。除了返回一个空字符串之外,我还尝试了返回null
and false
,它们都将提示的消息设置为“null”和“false”。我也尝试过不设置e.returnValue
at ,设置e.returnValue
to null
or false
,以及上述尝试的各种排列组合。
所以简而言之,问题是我需要如何更改上述代码以防止“您确定要离开”提示在 IE 10 中显示?Javascript 是否有问题,或者我在 IE 文档中遗漏了什么?
谢谢!