在JQuery中处理F5

Che*_*hev 8 javascript jquery

我有一个网站,我想覆盖F5,以便它不刷新页面,而是执行一些ajax调用来刷新某些部分.这可能吗?

编辑:因为你们似乎都不明白我为什么要做这样的事情,如果你真的有兴趣那么请访问这些链接:

开源项目(简单的网络终端):http: //code.google.com/p/web-terminal

简单的网络终端的运行演示:http: //web-terminal.net.pine.arvixe.com

实时实施(论坛版):http: //www.u413.com

jAn*_*ndy 10

好吧,你可以这样做(至少在某些浏览器中,我不确定这是否适用于跨浏览器),但它确实是一个非常糟糕的用户体验.

$(document).bind('keypress keydown keyup', function(e) {
    if(e.which === 116) {
       console.log('blocked');
       return false;
    }
    if(e.which === 82 && e.ctrlKey) {
       console.log('blocked');
       return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

无论如何,即使有效,用户还可以通过其他方式刷新网站.按ctrl + r(cmd + r)或只需按下刷新按钮.好吧,其他热键组合可以被阻止类似,但无法阻止刷新按钮.

-

最好不要阻止那些默认的浏览器行为,而是优雅地提问.这可以通过将事件处理程序绑定到事件来完成,该onbeforeunload事件在卸载站点之前触发.

$(window).bind('beforeunload', function() {
    return 'Are you really sure?';
});
Run Code Online (Sandbox Code Playgroud)


nom*_*mis 8

除了没有捕获'keypress'事件之外,这与上面接受的答案相同.

如果您捕获'keypress'事件,则还会阻止't'键.出于某种原因,如果使用'keypress'事件(在chrome调试器中无法看到),则会捕获键码和ASCII键码.F5键为'116',但't'的ASCII键码也是116,所以使用'keypress'事件可以阻止F5,但你也可以阻止't'应用程序范围.

$(document).bind('keydown keyup', function(e) {
    if(e.which === 116) {
       console.log('blocked');
       return false;
    }
    if(e.which === 82 && e.ctrlKey) {
       console.log('blocked');
       return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

这是coffeescript只是为了好玩:)

$(document).bind "keydown keyup", (e) ->
    if e.keyCode is 116
      console.log "blocked"
      return false
    if e.keyCode is 82 and e.ctrlKey
      console.log "blocked"
      false
Run Code Online (Sandbox Code Playgroud)