在 Vaadin 7 中创建的 onbeforeunload 函数返回空字符串在 IE 10 中仍然显示提示
onbeforeunload function created in Vaadin 7 returning empty string still displays prompt in IE 10
我不确定这是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
和 false
,它们分别将提示消息设置为"null"和"false"。我也尝试过完全不设置e.returnValue
,并将e.returnValue
设置为 null
或 false
,以及上述尝试的各种排列组合。
所以简而言之,问题是我需要如何更改上面的代码以防止"您确定要离开"提示显示在IE 10中?Javascript有什么问题,还是我在IE文档中遗漏了什么?
谢谢!
我猜返回一个空值是一种不清楚的返回未定义的方式......你的函数应该只说没有值的return;
,return undefined;
,或者return expression;
,其中表达式计算为未定义(例如 window.vrenifbruwfgw
、void(0)
等)
- 为什么这在IE中的工作方式与在Firefox中不同
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在 Vaadin 7 中创建的 onbeforeunload 函数返回空字符串在 IE 10 中仍然显示提示
- 工具提示器悬停选择和选项在IE中不起作用
- jquery工具提示在IE 10中不起作用
- IE 10 上带有 jquery 工具提示的 java 脚本错误
- 绝对定位时,工具提示在 IE 中闪烁
- 在IE Edge中触摸后按钮的本机工具提示不会隐藏
- JqueryUI 工具提示可防止<选择>元素下拉列表在 IE 11 中保持关闭
- IE用户名/密码提示不起作用
- 在IE 11上加载之前-不提示用户不工作
- 为什么这个工具提示没有'不在IE工作吗?错误:应为对象
- 工具提示不能在ie中工作
- bootstrap工具提示保持打开(IE、Firefox)
- Javascript提示-数据隐藏在ie中
- IE 11 ddl工具提示无法使用C#.net
- 使这些工具提示在IE和Opera中得到支持
- nvd3.js:IE 10中闪烁的饼图工具提示
- IE提示(.js)Javascript文件下载而不是执行它
- IE内网区域中的ActiveX控件被阻止,没有提示