Javascript 我可以在没有弹出窗口的情况下停止JS location.href吗?

Javascript 我可以在没有弹出窗口的情况下停止JS location.href吗?,javascript,jquery,location,href,Javascript,Jquery,Location,Href,我想构建一个JS外部脚本(tag),在不使用弹出窗口的情况下阻止location.href之类的代码(通常不是我的)发生。 我试过这样的方法: $(window).bind('beforeunload', function() { window.stop(); event.stopImmediatePropagation(); event.preventDefault(); location.href = '#'; }); 但似乎没有任何帮助。 同样,我需要它而不使用:retur

我想构建一个JS外部脚本(tag),在不使用弹出窗口的情况下阻止location.href之类的代码(通常不是我的)发生。 我试过这样的方法:

$(window).bind('beforeunload', function() {
 window.stop();
 event.stopImmediatePropagation();
 event.preventDefault();
 location.href = '#';  
 });
但似乎没有任何帮助。 同样,我需要它而不使用:return“你确定吗?” 也许是另一个回拨

谢谢, Dan

您是否尝试使用“return false”? 您还应该将事件发送到您的函数。 下面是一个示例,您可以防止按钮单击和超链接

<input type="button" value="click me" />
<a href="www.google.com"> google </a>

$(document).ready(function(){
    $('input[type="button"]').click(function(e){
             e.preventDefault();
    });
    $('a').click(function(e){
        e.preventDefault();

    });
});

$(文档).ready(函数(){
$('input[type=“button”]”)。单击(函数(e){
e、 预防默认值();
});
$('a')。单击(函数(e){
e、 预防默认值();
});
});

以下是链接

使用
onbeforeunload
确认导航离开的正确方法是只返回要显示的消息字符串

函数应该为事件对象的returnValue属性指定一个字符串值,并返回相同的字符串

因此,对于您请求的行为,您的
onbeforeunload
函数只是(与用jquery绑定它相同,特别是因为onbeforeunload不像其他事件那样支持多个事件侦听器)

但具有讽刺意味的是,出于安全目的,Firefox不支持这一点

请注意,在Firefox4和更高版本中,返回的字符串不会显示给用户。看

编辑:我阅读了更多的bug报告。他们做出此决定的主要原因是:“1.删除网站提供的文本,因为这是一个安全问题(浏览器对话框中的不可信文本)”。我想知道他们对
警报的感觉如何

大多数现代浏览器(Chome,IE 9+或更早版本,我肯定知道Opera)会忽略在
onbeforeunload
函数中尝试执行的任何操作,而不是返回字符串以供显示。这是为了防止劫持用户浏览器、打开弹出窗口、通过将用户指向另一个可能的恶意域来覆盖导航尝试等


编辑2:我显然不正确。只有一些东西在
onbeforeunload
中是不允许的,它们恰好是您在示例代码中尝试的类型,与事件传播和页面导航有关。从FF错误报告中,用户oyasumi发布了一个指向此JSFIDLE的链接,其中包含一个向FF 4+用户显示自定义文本的解决方法:因此显然,调用
alert()
仍然是允许的,即使是在
onbeforeuload
中,这正是“错误”修复的原始原因:在浏览器/应用程序/操作系统/官方外观对话框中显示自定义文本。

在jQuery中调用return false就像调用e.preventDefault()和e.stopPropagation()。。正如JQuery的创建者John Resig:and return false(不带“offcourse”)所解释的,在本例中,在弹出窗口中打印“return flase”,这很奇怪,但这就是所发生的事情,因此对我不好。我没有输入按钮或a href,我有一个Flash(不是我的),它调用一个JS方法来定位。href='url'。但是谢谢你的指导,对不起,返回错误是一个遗漏,不可能。能够在没有用户输入的情况下停止导航将破坏浏览的工作方式。我有同样的感觉。例如在Firefox中,出于安全原因,他们故意阻止覆盖window.location.href。看,事实上这是可能的。否则,询问您是否想要“离开并丢失更改”的网站将不存在。beforeunload事件存在,即使您关闭窗口而不冲浪,它也会捕获。
window.onbeforeunload = function() {
    return "Are you sure?";
};