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)    
}