移动浏览器后退按钮事件处理

时间:2014-09-02 05:15:17

标签: javascript jquery jquery-mobile

当我点击移动浏览器后退按钮时,应该说明确认框

  

"你想离开这个页面"

如果用户点击"确定"我需要触发一些功能。

它工作正常。但是当我点击"取消"它不会停留在同一页面上。我尝试了下面的代码。但我不能成功。

var unloadEvent = function (e) {
    var confirmationMessage = "Are you want to leave this page";
    (e || window.event).returnValue = confirmationMessage; 
    if(confirm(confirmationMessage)) {
      //some JS function
    } else {
       return false;
    }
};
window.addEventListener("beforeunload", unloadEvent);

请帮我解决这个问题。 的由于

1 个答案:

答案 0 :(得分:0)

您无法修改onbeforeunload的默认对话框,因此您最好的选择是使用它。

window.onbeforeunload = function() {
    //Do some other stuff here..
    return 'You have unsaved changes!';
}
来自Microsoft的

Here's a reference

  

当一个字符串被分配给window.event的returnValue属性时,会出现一个对话框,让用户可以选择保留当前页面并保留分配给它的字符串。对话框中显示的默认语句“您确定要离开此页面吗?...按OK继续,或按取消保留在当前页面上。”,无法删除或更改。

问题似乎是:

  1. 调用onbeforeunload时,会将处理程序的返回值设为window.event.returnValue
  2. 然后它将返回值解析为字符串(除非它为null)。
  3. 由于false被解析为字符串,因此会触发对话框,然后会传递相应的true / false
  4. 结果是,似乎没有办法将false分配给onbeforeunload以防止它出现在默认对话框中。

    关于jQuery的补充说明:

    • 在jQuery中设置事件可能会有问题,因为这样也会发生其他onbeforeunload事件。如果您只希望发生卸载事件,我会坚持使用简单的“JavaScript”。
    • jQuery没有onbeforeunload的快捷方式,因此您必须使用通用bind语法。

      $(window).bind('beforeunload', function() {} );
      

    Owen question: override onbeforeunload提出了这个答案 谢谢欧文。