关闭选项卡时要求确认

IT技术 javascript browser
2021-02-23 17:32:41

当我在某个浏览器上关闭我的页面时,我希望出现一个消息框并询问我是否真的要关闭页面,有两个按钮,如果我单击,No则该选项卡将不会关闭。

我怎样才能做到这一点?

3个回答

您需要监听beforeunload事件。

这是一个启动示例:

window.onbeforeunload = function() {
    return "Hey, you're leaving the site. Bye!";
};

此消息将以确认对话框的形式显示。此消息将在客户端卸载页面之前显示。这可以是浏览器关闭,也可以是简单的导航操作,例如单击链接或在页面中提交表单!

您很可能还希望在null单击内部链接或提交内部表单时将其关闭(只需设置为)。您不想以不直观的行为惹恼最终用户。您可以通过监听click所需链接的submit事件和所需表单事件来做到这一点jQuery在这里可能会有很大帮助,因为它以跨浏览器兼容的方式做到这一点,因此您无需为此编写 > 20 行 JS 代码:

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    window.onbeforeunload = function() {
        return "You're leaving the site.";
    };
    $(document).ready(function() {
        $('a[rel!=ext]').click(function() { window.onbeforeunload = null; });
        $('form').submit(function() { window.onbeforeunload = null; });
    });
</script>

您只需要为所有外部链接提供事实上的标准属性rel="ext"来表示这些是外部链接。

<a href="http://google.com" rel="ext">Google</a>
ios 不再支持 beforeunload。任何其他解决方案?
2021-04-18 17:32:41
@Marcel:这确实是禁用该功能的另一种方式。然而,这需要一个全局的,我想尽可能地避免它们。
2021-04-24 17:32:41
用更好的解决方案更新评论。以下选择所有不属于以下内容的链接:相对、在同一域上,并且不是符号 (#)。$('a:not([href^="/"],[href*="'+window.location.host+'"], [href^="#"])')
2021-05-04 17:32:41
如果添加属性 rel="ext" 不可行,您还可以将链接的 href 位置与当前页面进行比较。$('a[href*="'+window.location.host+'"]')
2021-05-11 17:32:41
onbeforeunload如果您不想显示警告框,则不必分离该功能。只需让函数不返回任何内容,浏览器就会按预期运行(关闭窗口、返回历史记录等)。
2021-05-13 17:32:41

onbeforeunload火灾前onunload

您无法取消 中的事件onunloadonbeforeunload允许从事件中返回一个字符串(例如window.onbeforeunload = function() {return "really leave now?"},浏览器会询问用户是否要离开您的页面。如果单击“是”,则页面在停止事件方面没有发言权(这应该是在我的看法。)

一般要点:

  • alert,prompt并且confirm在任何一个事件中都不允许。
  • Opera 都不支持。

警告:至少在 IE6/7(可能是 IE8,但不是 FF/Chrome 等)中onbeforeunloadonunload并且在点击锚点/javascript 链接时触发。一些例子:

  • <a href="#myanchor">trigger unload!</a>
  • <a href="javascript: alert('message!')">trigger unload!</a>

(考虑到 MSDN 是非标准的,而且 Firefox/Chrome/Safari 似乎在很大程度上复制了 IE 的实现,因此 MSDN 与任何来源一样好。)

使用 onbeforeunload 事件

window.onbeforeunload = function(){
    return "Are you sure you want to close the window?";
}

这将显示一个消息框,用户可以在其中选择是否关闭窗口。

请注意,Opera 不支持此功能