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

onbeforeunload function created in Vaadin 7 returning empty string still displays prompt in IE 10

本文关键字:IE 提示 显示 字符串 返回 Vaadin 创建 函数 onbeforeunload      更新时间:2023-09-26

我不确定这是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 文档,如果我返回一个空值,则不应弹出对话框。除了返回空字符串外,我还尝试返回 nullfalse ,它们分别将提示消息设置为"null"和"false"。我也尝试过完全不设置e.returnValue,并将e.returnValue设置为 nullfalse ,以及上述尝试的各种排列组合。

所以简而言之,问题是我需要如何更改上面的代码以防止"您确定要离开"提示显示在IE 10中?Javascript有什么问题,还是我在IE文档中遗漏了什么?

谢谢!

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