javascript - 如何在关闭浏览器时触发卸载方法?

标签 javascript jquery jquery-events onbeforeunload onunload

观察到的场景:

  1. 关闭浏览器时,会触发 beforeunload 事件,但不会触发 unload 事件。

  2. 关闭选项卡时,beforeunload 事件和 unload 事件都会被触发。

问题:

如何在关闭浏览器时触发 unload 方法?

代码:

    var inFormOrLink = false;
    var flag = false;

    $(document).ready(function () {
        $(window).bind("beforeunload", function () {
               return "You are about to close the window";
        });
        $(window).on("unload", function () {
            if (!inFormOrLink)
                window.open('../Account/Login?admin=admin', "_blank");
        });
    });

    $(function () {
        $("a").click(function () {

            if (!flag) {
                inFormOrLink = true;
                $(window).unbind('beforeunload');
                $(window).unbind('unload');
            }
            else {
                // inFormOrLink = false;
                $(window).bind('beforeunload');
                $(window).bind('unload');
            }
        });

        $(".btn").click(function () {

            if (!flag) {
                inFormOrLink = true;
                $(window).unbind('beforeunload');
                $(window).unbind('unload');
            }
            else {
                inFormOrLink = false;
                flag = false;
                $(window).bind('beforeunload');
                $(window).bind('unload');
            }

        });
        $("body").keydown(function (e) {
            if (e.which == 116 || e.which == 117) {
                inFormOrLink = true;
            }
            else if (e.ctrlKey && e.keyCode == 82) {
                inFormOrLink = true;
            }
            else if (e.which == 8) {
                var tag = e.target.tagName.toLowerCase();
                inFormOrLink = true;
                if (tag != "input") {
                    e.preventDefault();
                }
            }
            else {
                inFormOrLink = false;
                $(window).bind('unload');
            }
        });
    });

'

最佳答案

理论上,onunload 事件应该在您提到的情况下运行,但是,有很多浏览器,并且每个浏览器都是由不同的团队实现的。由于您在一些浏览器中发现了错误,因此我建议您将事件处理程序附加到 beforeunload 而不是 unload。在这种情况下,您可以解决该问题。另一种可能性是运行 unload 事件,如下所示:

$(window).unload();

关于javascript - 如何在关闭浏览器时触发卸载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37480921/

相关文章:

javascript - `this` 绑定(bind)和 `this` 的调用站点

javascript - Highstock 列范围数据分组值不一致

javascript - iPad Safari 的悬停事件

jquery - Zend framework 和 jQuery Mobile,无法导入 Javascript 和 CSS 文件

Javascript "mouseover"和 "mouseout"事件

javascript - Chrome 扩展 - 将信息传递到 API - 获取 cors 400

javascript - 在提交表单之前如何检查文件是否已选择上传

javascript - 使用 ajax/js 更新多个选择标签之一

javascript - 单击链接文本时,jQuery 函数(事件)event.target.id 为空

javascript - oop:点击事件