代码之家  ›  专栏  ›  技术社区  ›  J__

在Web浏览器中捕获选项卡关闭事件?

  •  4
  • J__  · 技术社区  · 16 年前

    是否有任何方法知道用户是否关闭了Web浏览器中的选项卡?特别是IE7,也包括火狐和其他。如果包含网站的当前选项卡关闭,我希望能够从ASP代码处理这种情况。

    7 回复  |  直到 12 年前
        1
  •  2
  •   Eran Galperin    16 年前

    附上“ onbeforeunload “事件。它可以在浏览器/选项卡关闭之前执行代码。

        2
  •  6
  •   Santosh    14 年前

    OnBeforeUnload还将在以下事件上调用-

    * Close the current browser window.
    * Navigate to another location by entering a new address or selecting a Favorite.
    * Click the Back, Forward, Refresh, or Home button.
    * Click an anchor that refers the browser to another Web page.
    * Invoke the anchor.click method.
    * Invoke the document.write method.
    * Invoke the document.open method.
    * Invoke the document.close method.
    * Invoke the window.close method.
    * Invoke the window.open method, providing the possible value _self for the window name.
    * Invoke the window.navigate or NavigateAndFind method.
    * Invoke the location.replace method.
    * Invoke the location.reload method.
    * Specify a new value for the location.href property.
    * Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method.
    

    因此,如果您试图注销用户,如果他们关闭了选项卡或浏览器窗口,那么每次他们单击链接或提交页面时,您都会将其注销。

        3
  •  1
  •   Anonymous    16 年前

    document.unload是否不执行此操作?

        4
  •  0
  •   Nickolay    16 年前

    如果您需要知道页面何时在服务器端关闭,最好是定期从页面ping服务器(通过 XMLHttpRequest 例如)。当Ping停止时,页面将关闭。如果浏览器崩溃、被终止或计算机关闭,这也会起作用。

        5
  •  0
  •   eyelidlessness    16 年前

    按照Eran Galperin的建议,使用 onbeforeunload . 特别是,返回一个字符串,该字符串将包含在一个确认对话框中,该对话框允许用户选择是否离开页面。每个浏览器在返回的字符串之前和之后都包含一些文本,因此您应该在不同的浏览器中进行测试,以查看将向用户显示什么。

        6
  •  0
  •   Tyler    14 年前

    我确信OP是从网页本身的上下文中提出的,但是对于遇到这个问题的任何Firefox插件开发人员,您可以使用 TabClose 事件。 https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed

        7
  •  0
  •   ThdK    12 年前

    Santosh是对的,这一事件将由更多的操作触发,而不仅仅是单击选项卡/浏览器的“关闭”按钮。我已经创建了一个小黑客程序,通过在文档就绪时添加以下函数来防止onbeforeunload操作被触发。

           $(function () {     
            window.onbeforeunload = OnBeforeUnload;
                $(window).data('beforeunload', window.onbeforeunload);
                $('body').delegate('a', 'hover', function (event) {
                    if (event.type === 'mouseenter' || event.type === "mouseover")
                        window.onbeforeunload = null;
                    else
                        window.onbeforeunload = $(window).data('beforeunload');
                });
            });
    

    此外,在触发Santosh提到的任何事件之前,您需要运行以下行:

    window.onbeforeunload = null;
    

    如果不希望触发事件。

    下面是最后一段代码:

        function OnBeforeUnload(oEvent) {   
                // return a string to show the warning message (not every browser will use this string in the dialog)
                // or run the code you need when the user closes your page  
            return "Are you sure you want to close this window?";       
        }