我想阻止页面重定向我知道它可以通过这个来实现
window.onbeforeunload = function() {
return "Dude, are you sure you want to leave? Think of the kittens!";
}
这里已经回答Prevent any form of page refresh using jQuery/Javascript
但在我的情况下,我只想通过点击任何锚标记来重定向页面时阻止页面。
同样event.preventDefault()
在单击锚标记时不起作用,因为所有锚点都没有重定向页面,所以它应该可以正常工作。
我只想通过单击锚点重定向来停止重定向页面。任何解决方案?
答案 0 :(得分:4)
您可以保留一个标记,告诉您用户是否点击了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;
});
});
答案 1 :(得分:0)
您可以使用onhashchange
。
使用jQuery:
$(window).on('hashchange', function() {
alert('bye byee?');
});
Plain 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约定中的事件。
答案 2 :(得分:0)
因此,既然你标记了jQuery,那么我就会根据它来解决问题。您可以获取所有标签,然后检查以确保锚是重定向,然后使用e.preventDefault();
$('a').on('click',function(e){
if ($(this).attr('href') != window.location.href)
{
e.preventDefault();
//do stuff
}
});
答案 3 :(得分:0)
如果点击链接,则调用者将为null:
window.onbeforeunload = function() {
alert(window.onbeforeunload.caller)
}