当用户点击关闭浏览器时,JavaScript会确认触发(但是当他们点击刷新按钮时却没有)

时间:2013-12-10 21:43:12

标签: javascript jquery

这里有几个类似的问题,但它们都没有提供我正在寻找的解决方案。

当用户点击浏览器上的关闭按钮时,我需要弹出警报以确认他们确实要关闭浏览器。这很容易写:

$(window).bind('beforeunload', function(){
    return 'Are you sure you want to close your browser?';
});

问题在于,当您执行诸如刷新浏览器,点击按钮和链接等操作时,它也会触发。

通过检测按键并检查keyCodes,可以预防大部分内容:

  if (e.keyCode == 114 || e.keyCode == 116 || e.keyCode == 0 || e.keyCode == 17 ||(e.ctrlKey && e.keyCode == 114)){
      confirmBrowserClose = false;
  }

  $("a").bind("click", function() {
    confirmBrowserClose = false;
  });

  $("form").bind("submit", function() {
    confirmBrowserClose = false;
  });

  $("input[type=submit]").bind("click", function() {
    confirmBrowserClose = false;
  });

这些东西阻止了大部分内容,但有一件事不起作用就是刷新。当用户使用键盘刷新时我可以防止它被触发(如F5),但我需要知道当用户点击刷新按钮或进入URL窗口时如何阻止我的确认警报被触发。

我发现散布在互联网上的大多数内容都表示要么无法完成,要么谈论使用keyCodes和F5刷新等内容。我知道这可以做到,因为有很多网站都有这个功能。一些使用它的网站是Facebook和JSFiddle.net。在Facebook中,如果您开始键入状态更新,然后尝试关闭浏览器,它将弹出确认。在JSFiddle中,如果您对小提琴进行了更改,然后尝试关闭浏览器,则会弹出警告提示,如果您关闭,您的更改将会丢失。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

这是不可能的。如果你观察得当,即使Facebook.com和JSFiddle.net也没有这个功能。

beforeunload是唯一一个在离开页面时被触发的事件。(通过页面刷新[f5,ctrl + r],制表符关闭,加载另一个链接[这也说明离开当前页面,因此触发beforeunload])

相关问题