window beforeunload在jquery中没有按预期工作

时间:2016-09-07 12:33:32

标签: javascript jquery html onbeforeunload

基本上我想要做的是,每当用户试图关闭当前标签时(当他在我的网站上时),我想显示一个弹出窗口,其中有三个选项,说明他要离开的原因并想要存储选择一些

所以我在main.js中写了以下内容,将通过整个网站页面加载

$(document).ready(function() {
  // Before closing the current tab, ask user for a reason
    $(window).on('beforeunload', function(event){
      $('#load_choices_up').click();
      event.stopPropagation();
      event.preventDefault();
      debugger;
    });
});

所以我对上面的jquery代码有三个问题

*。即使我点击同一页面上的另一个链接(我的意思是如果我从当前页面导航到另一个页面),此代码仍在执行,但我只希望此代码在当前选项卡/页面时运行完全关闭(即将关闭),但在导航到我网站上的其他网页时却没有关闭

*。在执行此行$('#load_choices_up').click()之后,弹出的选项按预期打开,但是立即默认处理浏览器(即关闭功能)没有停止,有两行event.stopPropagation();和{{1} },我的意思是这两种停止行为的方法不起作用,浏览器关闭,但我想根据用户选择输入进行一些处理,然后根据我将关闭标签。

*。当我使用event.preventDefault();而不是弹出选项时,浏览器会根据浏览器类型显示不同的消息,例如"您有未保存的更改"在chrome中,以及firefox中的一些不同消息,而不是显示我的自定义消息

最后,为什么return "Why do you want to leave the page"event.stopPropagation();无效?为什么我无法显示自定义信息?

1 个答案:

答案 0 :(得分:1)

您无法阻止某人关闭浏览器。这是出于明显的安全原因。想象一下,一个垃圾邮件网站阻止你关闭网站,同时向你充满了神知道什么。

您最多可以使用alert()prompt这样的功能。用户关闭它们后,该选项卡将以任一方式关闭。

beforeUnload也非常短暂。您将无法使用它运行大量脚本,因为用户可能会在任何脚本正常运行之前关闭水龙头。 (我尝试使用ajax调用,但没有工作)

因此,即使您能够在那里获得所需的选项,当用户选择其中一个选项时,您也无法将其保存在任何地方。你的剧本永远不会那么远。

您可以自定义“你确定吗?”像这样的消息:

$(document).ready(function() {
    window.onbeforeunload = function(e) {
       return 'Dialog text here.';
    };
});

但同样,您只能更改文字。它是浏览器的本机功能,您无法更改它。