在Vaadin 7中创建的onbeforeunload函数返回空字符串仍然在IE 10中显示提示

时间:2013-11-07 17:44:19

标签: javascript internet-explorer vaadin onbeforeunload

我不确定这是一个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论坛上this post中所述。

在Firefox中按预期工作,事件被发送回服务器,没有提示,询问用户是否要离开页面。它只是让他们离开。

然而,在IE 10(和Chrome,但目前只有IE 10相关)仍然会发送消息,这会关闭我的Vaadin会话,但会要求用户确认是否要离开。由于我已经关闭会议,如果他们选择留下,这显然会引起一些重大问题。

根据the IE documentation on the onbeforeunload event,如果我返回一个空值,则不会弹出对话框。除了返回一个空字符串之外,我还尝试了返回nullfalse,它们都将提示的消息设置为“null”和“false”。我也尝试过根本不设置e.returnValue,并将e.returnValue设置为nullfalse,并将上述尝试的各种排列组合在一起。

简而言之,问题是如何更改上面的代码以防止在IE 10中显示“你确定要离开”提示吗? Javascript有什么问题,或者我在IE文档中遗漏了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

返回一个空值我猜是一种不明确的方式说回复未定义...你的函数应该只是说return;没有值,return undefined;return expression;,其中expression的计算结果为undefined(例如window.vrenifbruwfgwvoid(0)等等......)