Javascript 关闭浏览器时如何启动卸载方法?

Javascript 关闭浏览器时如何启动卸载方法?,javascript,jquery,jquery-events,onbeforeunload,onunload,Javascript,Jquery,Jquery Events,Onbeforeunload,Onunload,观察到的场景: var inFormOrLink = false; var flag = false; $(document).ready(function () { $(window).bind("beforeunload", function () { return "You are about to close the window"; }); $(window).on("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');
            }
        });
    });
  • 关闭浏览器时,会触发
    beforeunload
    事件,但不会触发
    unload
    事件

  • 关闭选项卡时,将同时触发
    beforeunload
    事件和
    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');
                }
            });
        });
    
    关闭浏览器时如何启动
    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
    事件应该在您提到的情况下运行,但是,有许多浏览器,每个浏览器都由不同的团队实现。由于您在一些浏览器中观察到一个bug,我建议您在卸载之前将事件处理程序附加到
    ,而不是
    unload
    。在这种情况下,你可以解决这个问题。另一种可能性是运行
    unload
    事件,如下所示:

    $(window).unload();
    

    理论上讲,
    onunload
    事件应该在您提到的情况下运行,但是,有许多浏览器,每个浏览器都由不同的团队实现。由于您在一些浏览器中观察到一个bug,我建议您在卸载之前将事件处理程序附加到
    ,而不是
    unload
    。在这种情况下,你可以解决这个问题。另一种可能性是运行
    unload
    事件,如下所示:

    $(window).unload();