当前位置: 首页 > 知识库问答 >
问题:

选项卡/浏览器关闭事件在重新加载时工作

经昱
2023-03-14

我想检测浏览器/选项卡关闭事件。我在jQuery和Javascript中都尝试过“beforeunload”、“unload”等。在选项卡/浏览器上工作的解决方案将关闭,并在重新加载页面时关闭。

在jQuery/Javascript中是否可以检测选项卡/浏览器关闭事件?在重新装载时不会开火。

在“重新加载”和“选项卡/浏览器关闭”两种情况下,都需要执行以下操作

var inFormOrLink;

$(window).bind("beforeunload", function () {
    return inFormOrLink ? "Do you really want to close?" : null;
});

window.addEventListener("beforeunload", function (e) {
    var confirmationMessage = "werwerew";

    (e || window.event).returnValue = confirmationMessage;
    return confirmationMessage;                          
 });

共有2个答案

周健
2023-03-14

我也一直在与“卸载”和“卸载前”事件作斗争,以检查标签关闭,但如果页面使用文档中提交的任何链接或表格刷新,这些功能也会启动。所以我找到了下面这段代码,它对我有效。它将防止在锚点击和表格提交时启动“之前卸载”事件。

此代码的缺点是,它仍然无法区分用户是否按F5或浏览器刷新按钮或后退按钮。但我希望它能在某种程度上帮助你或任何其他人

//Message you wish to display upon closing tab window
var exitmessage = 'Are you sure you want to leave the site?';

//Load Event fires up on every body load 
function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
        window.onload = func; 
} else { 
    window.onload = function() {
    if (oldonload) { 
        oldonload(); 
    }  func(); }
}
}

// Add a click event to a tag
function addClickEvent(a,i,func) { 
if (typeof a[i].onclick != 'function') { 
    a[i].onclick = func; 
} 
}

theBody = document.body; if (!theBody) {
theBody = document.getElementById("body"); 
if (!theBody) {
    theBody = document.getElementsByTagName("body")[0];
}
}

//Set a variable to prevent running the code on links visit or form submit
var PreventExit   = false;

//The actual function that works on tab close or when the beforeunload function is fired
function DisplayExit(){ 
if(PreventExit   == false){         
    PreventExit = true;

    //run whatever code you want to run here. We are just displaying an alert message       
    return exitmessage; 
} 
}

//Search for A tags and prevent running the unload event
var a = document.getElementsByTagName('A'); 
for (var i = 0; i < a.length; i++) { 
if(a[i].target !== '_blank') {
    addClickEvent(a,i, function(){ 
        PreventExit = true; 
    });
} else{
    addClickEvent(a,i, function(){ 
        PreventExit = false;
    });
}
}

disablelinksfunc = function(){
var a = document.getElementsByTagName('A'); 
for (var i = 0; i < a.length; i++) { 
    if(a[i].target !== '_blank') {
        addClickEvent(a,i, function(){ 
            PreventExit = true; });
    } else{
        addClickEvent(a,i, function(){ 
            PreventExit = false;
        });
    }
}
}
addLoadEvent(disablelinksfunc);


//Disable event to fire up on a FORM submit
disableformsfunc = function(){ 
var f = document.getElementsByTagName('FORM'); 
for (var i=0;i<f.length;i++){ 
    if (!f[i].onclick){ 
        f[i].onclick=function(){ 
            PreventExit = true; 
        } 
    }else if (!f[i].onsubmit){ 
        f[i].onsubmit=function(){ 
            PreventExit = true; 
        }
    }
}
}
addLoadEvent(disableformsfunc);


window.onbeforeunload = DisplayExit;
濮阳俊明
2023-03-14

这实际上是意料之中的 unload事件检测页面当前状态的任何更改。这意味着当您关闭页面或离开页面时,会触发事件。您可以尝试在某种程度上区分用户是单击以离开页面还是浏览器已关闭,但说实话,没有完美的方法可以阻止浏览器关闭。以下函数在某种程度上实现了这一点

window.onbeforeunload = function (event) {
    var message = 'You are about to close the browser window';
    if (typeof event == 'undefined') {
        event = window.event;
    }
    if (event) {
        event.returnValue = message;
    }
    return message;
};

$(function () {
    $("a, button, input[type='submit']").click(function () {
        window.onbeforeunload = null;
    });
});

或者,如果您希望以更好的方式实现浏览器关闭功能,请选择JQuery Popup

 类似资料:
  • 问题内容: 嗨,我想知道如何在浏览器选项卡关闭时提示消息。我正在使用Reactjs。 这是我尝试添加到我的react组件中的内容。请指导我如何继续进行。 问题答案: 除了事件名称和警报将在该特定事件中阻止这一事实之外,您所做的都是正确的。 您可以显示如下消息: 希望这可以帮助。

  • 我的目标是在浏览器选项卡关闭时删除用户cookie。 有可能吗?我可以处理浏览器标签关闭事件没有刷新情况? 如果我在用户刷新页面时使用或事件触发的函数,我不想这样,我只想在关闭选项卡时运行。 我怎样才能做到这一点?

  • 我转到了此链接我如何在Angular中处理浏览器选项卡关闭事件?只关闭,不刷新 但我不知道如何在Angular 4中实现这一点。 我无法识别页面何时刷新以及选项卡或浏览器何时关闭。 因为在这两种情况下,它都会触发“window:unload”和“window:beforeunload”事件,所以很难识别。 实际上,我想在浏览器或选项卡关闭时触发注销事件,但在刷新时也会触发。 下面是我的代码。 任何

  • 问题内容: 我的目标是在浏览器选项卡关闭时删除用户cookie。 可能吗?我可以在没有刷新情况下处理浏览器选项卡关闭事件吗? 如果我使用或事件,则当用户刷新页面时会触发函数,我不希望这样,我只想在关闭选项卡时运行。 如何在Angular中做到这一点? 问题答案: 可悲的是,这不是一个简单的问题要解决。但这是可以完成的。以下答案是由许多不同的SO答案合并而成的。 简单的部分: 知道该窗口已被破坏。您

  • 我想捕获浏览器窗口/选项卡关闭事件。我尝试了以下方法,但不起作用: 尝试了这些链接,但没有更多的成功。 JavaScript检查浏览器窗口何时关闭 如何捕获浏览器窗口关闭事件? javascript检测浏览器关闭标签/关闭浏览器 尝试检测浏览器关闭事件 问题: 我只想检测浏览器关闭事件,并在不向用户显示提示的情况下对此进行一些处理。 我尝试过很多方法,通过jQuery或JavaScript检测浏览

  • 本文向大家介绍关闭浏览器窗口/选项卡时如何删除localStorage项目?,包括了关闭浏览器窗口/选项卡时如何删除localStorage项目?的使用技巧和注意事项,需要的朋友参考一下 要在浏览器关闭时清除localStorage数据,可以使用window.onunload事件检查选项卡关闭。 假设为了这个示例,您有一个名为MyStorage的本地存储对象作为全局对象。然后您可以编写一个事件处理