在chrome中没有正确处理windowClosing处理程序
GWT: windowClosing handler not properly handled in chrome
Window closing handler is not working on my code under Chrome (I'm on it's last version, 26)
我有一个听Window.ClosingEvent
的类。如果在用户上传文件时窗口被关闭(关闭窗口,用户输入另一个url…),应用程序会提示用户"are you sure?"
GWT 2.5.0和2.5.1IExplorer 10 okFirefox 21 okOpera还不支持这个事件。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);
...
}
}
以上代码符合并在浏览器,Firefox中正常工作,所以我认为代码是ok的。
有趣的是,如果我在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可以工作,所以我也尝试以本机方式实现它。同样的问题。可以在ie, 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;
}
这个问题快把我逼疯了。有什么想法吗?谢谢大家!
我发现了同样的问题。非常令人沮丧。
这个站点为大多数浏览器提供了很好的解决方案。
Chrome提供的方法在用户关闭窗口时弹出"are you sure?"对话框。它需要这样做来可靠地获取onClose事件。任何关闭处理都需要在此之前完成,所以如果用户单击"否",页面/应用程序仍然需要运行。
我怀疑这个问题是你的其他逻辑,而不是Chrome的onbeforeunload
行为。要验证这一点,请硬编码onbeforeunload处理程序以返回字符串:
$wnd.onbeforeunload = function() { return "Are you sure?" };
确保你的JSNI方法实际上正在被调用(inspect window。在浏览器控制台中Onbeforeunload以验证处理程序是否已实际添加)。
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 使用javascript进行实时图像处理
- 导入jQuery脚本获胜'我不处理html文件
- Javascript无法处理表单提交
- 在承诺链中处理早期回报的最佳方式
- 在chrome中没有正确处理windowClosing处理程序