我的代码在点击链接或刷新或关闭标签时发出警报。
但我需要在关闭窗口(标签)上提醒 。怎么做?我的网站上有很多外部和内部链接。
<html>
<head>
<script type="text/javascript">
window.onbeforeunload = function (e) {
var e = e || window.event;
//IE & Firefox
if (e) {
e.returnValue = 'Are you sure?';
}
// For Safari
return 'Are you sure?';
};
</script>
</head>
<body>
<!-- this will ask for confirmation: -->
<!-- I need to alert for external links. -->
<a href="http://google.com">external link</a>
<!-- this will ask for confirmation: -->
<!-- I don't need to alert for local links in my web site -->
<a href="about.html">internal link</a>
</body>
</html>
答案 0 :(得分:-1)
document.activeElement
在这种情况下非常方便,它将等于您单击以卸载页面的链接。然后,您可以检查链接的href
属性是否包含您的主机名。 codepen.io的一个例子是(demo here):
window.onbeforeunload = function (e) {
var e = e || window.event;
var element = document.activeElement;
if(element.tagName === 'A' && element.href.indexOf('codepen.io/') === -1) {
//IE & Firefox
if (e) {
e.returnValue = 'Are you sure?';
}
// For Safari
return 'Are you sure?';
}
};
我最初的想法是为http://
和https://
做一个正则表达式来查看路径是否是相对的,但看起来浏览器基本上将相对路径转换为绝对路径并在前面加上http ...
如果您想编写此代码以使其更具通用性,您可以使用location.hostname
而不是静态键入主机名来进行比较。
最后,您的milage可能会因IE而异,具体取决于您希望支持上述代码的IE可能需要更新。现在的趋势是支持IE11 +:)