如何访问触发beforeunload的JavaScript href事件

Dav*_*ook 4 javascript mailto onbeforeunload javascript-events

我想访问导致beforeunload事件的事件.具体来说,如果我点击指向另一个页面的链接,我想知道在beforeunload事件处理程序中链接是什么.

通过这种方式,我将根据URL的内容在beforeunload事件处理程序中执行不同的操作.

例如'http:'或'https:'警告用户丢失未保存的更改; 'mailto:'或'skype:'不警告用户,因为页面实际上不会被卸载.

我正在尝试为这样的问题构建一个很好的解决方案: mailto link(在chrome中)触发window.onbeforeunload - 我可以阻止这个吗?

chu*_*ash 16

我已经准备好告诉你这是不可能的,因为当你检查出event.target,event.originaltarget等时,onbeforeunload事件只报告被窗口触发.但是,如果你覆盖window.onclick,我们可以修改注册页面上最后一次单击哪个元素的方法.然后,通过为window.onbeforeunload提供代码,我们可以指定新行为来检查最后点击的元素的href.万岁,啤酒!

这里的代码将为您提供您想要的完整信息,在纯JavaScript中,并且无需在锚标记内添加任何内容.我还会在preventDefault()中弹出"弹出"这个页面要求您确认是否要离开 - 您输入的数据可能无法保存.确认框.希望这会有所帮助 - 你可以从这里弄清楚该怎么做.

<!DOCTYPE html>
<html lang="en">
<head>
    <title>12065389</title>
    <meta charset="utf-8">
    <script type="text/javascript">
        var last_clicked;

        window.onclick = function(e) {
            last_clicked = e.target;
            return true;
        }

        window.onbeforeunload = function(e) {
            var e = e || window.event;
            if (last_clicked.href) {
                alert(last_clicked.href);
                e.preventDefault();
            }
        }
   </script>
</head>
<body>
<a href="http://google.com">google</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)