在浏览器中的任何位置按ESC时,取消等待请求

时间:2012-08-30 13:42:41

标签: java javascript browser cross-browser

我正在使用Java Servlet 3.0的AsyncContext实现使用长池的应用程序。

如您所知,始终应该有一个打开的连接,可以监听服务器并接收推送通知。我没有问题,但会出现以下问题:

当在浏览器中的任何地方按ESC键时(无论何时未选择任何内容或我在文本区域/文本区域中聚焦),浏览器都会关闭应保持打开的请求。

预期的行为是什么? 是否有跨浏览器方式来阻止此行为?

我使用Firebug

在Chrome和Mozilla上测试了这个

我知道我可以在keyup上发送一个附加body事件的新请求,但这可能会在使用大量event.stopPropagation()的大型JS文档中出错。

LE:Firebug日志:

enter image description here

1 个答案:

答案 0 :(得分:0)

Mozilla在这个问题上存在一个突出的问题,该错误最初是在2010年发布的。

https://bugzilla.mozilla.org/show_bug.cgi?id=614304

“按ESC退出在Firefox中打开XMLHttpRequests。这在其他浏览器中不会发生(除了在WebKit中,但只有在页面加载完成之前启动了XHR)。”

作为一种解决方法,我建议您可以捕获任何ESC按下。使用jQuery,您可以执行以下操作:

$(document).keyup(function(e) {
  if (e.keyCode == 27) { return false };
});