我想访问导致beforeunload事件的事件。具体来说,如果我点击指向另一个页面的链接,我想知道在beforeunload事件处理程序中链接是什么。
通过这种方式,我将根据URL的内容在beforeunload事件处理程序中执行不同的操作。
例如'http:'或'https:'警告用户丢失未保存的更改; 'mailto:'或'skype:'不警告用户,因为页面实际上不会被卸载。
我正在尝试为这样的问题构建一个很好的解决方案: mailto link (in chrome) is triggering window.onbeforeunload - can i prevent this?
答案 0 :(得分:15)
我已经准备好告诉你这是不可能的,因为当你检查出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>
答案 1 :(得分:0)
我可能会将事件附加到页面上的所有链接,而不是beforeunload事件。
类似的东西:
$("a").click(function(evt) {
if($(this).attr('href').indexOf('http') == 0) {
if(confirm("Are you sure?")) {
//continue
} else {
evt.preventDefault();
}
}
}