Javascript 如果页面正在重定向,请单击“定位”停止重定向页面
我想防止页面重定向,我知道这可以实现Javascript 如果页面正在重定向,请单击“定位”停止重定向页面,javascript,jquery,Javascript,Jquery,我想防止页面重定向,我知道这可以实现 window.onbeforeunload = function() { return "Dude, are you sure you want to leave? Think of the kittens!"; } 这在这里得到了回答 但在我的例子中,我只想通过单击任何锚标记来阻止页面重定向 另外,event.preventDefault()在我点击锚定标签时将不起作用,因为所有锚定都没有重定向页面,所以应该可以正常工作 我只想停止重定向
window.onbeforeunload = function() {
return "Dude, are you sure you want to leave? Think of the kittens!";
}
这在这里得到了回答
但在我的例子中,我只想通过单击任何锚标记来阻止页面重定向
另外,event.preventDefault()
在我点击锚定标签时将不起作用,因为所有锚定都没有重定向页面,所以应该可以正常工作
我只想停止重定向页面,如果它是通过点击锚重定向。任何解决方案?您可以使用
onhashchange
使用jQuery:
$(window).on('hashchange', function() {
alert('bye byee?');
});
纯DOM JavaScript:
window.onhashchange = function() {
alert('bye byee?');
};
注意:您需要为不支持此事件的旧浏览器创建自定义“哈希更改”处理程序
您可以轻松地使用setInterval
执行此操作,并检测document.location.hash
中的任何更改
故障保护
onhashchange
对于旧浏览器:
var currentHash = document.location.hash;
window.prototype.onhashchange = function( callback ) {
if(typeof(callback) == 'function') {
setInterval(function() {
if(document.location.hash !== currentHash) {
callback();
}
}, 650); // more than a half-a-second delay
}
}
您可以将其作为常规DOM约定中的事件使用。因此,既然您标记了jQuery,我将用它来说明我的解决方案。您可以抓取所有a标记,然后检查以确保锚定是重定向,然后使用
e.preventDefault()代码>
您可以保留一个标志,告诉您用户是否单击了a
标记,然后在onbeforeunload
脚本上阅读:
window.onbeforeunload = function () {
if (_clickedAnchor) {
_clickedAnchor = false;
return "Dude, are you sure you want to leave? Think of the kittens!";
}
}
_clickedAnchor = false;
jQuery(document).ready(function () {
jQuery("a").click(function () {
_clickedAnchor = true;
});
});
如果单击链接,调用方将为空:
window.onbeforeunload = function() {
alert(window.onbeforeunload.caller)
}
单击定位点时设置标志。然后检查此手柄中的标志您可以查看。调用者
请参见:我甚至没有想到这一点。真棒的回答如果一个链接被用来调用JS呢?这个标志将被设置。@DRobinson如果你已经没有使用jQuery,你可能是对的,但是问题被标记了它-如果你正在使用jQuery,那么我说只要你能使用它就可以了。“这比处理浏览器特有的事件怪癖要容易得多。”DRobinson用tab键点击链接并按enter键仍然会触发单击事件。然后,是的,我看到的唯一问题就是Diodeus所解释的。您可以将href存储在_clickedAnchor中,并检查它是否为null,或以“#”开头,而不是真/假。在通常设置为false的位置将其设置为null。仍然不是完美的,因为它很可能有一个href w/代码来捕捉点击并返回false以防止其重定向。我正在使用jquery 1.7和IE 9,但它不起作用,将尝试此回调即使我从URL刷新页面,它也会一直返回null,但如果从JS函数刷新页面,您应该会得到函数名。
window.onbeforeunload = function() {
alert(window.onbeforeunload.caller)
}