我可以停止JS位置.没有弹出窗口

Can I stop JS location.href without a popup?

本文关键字:窗口 位置 JS 我可以      更新时间:2023-09-26

我想构建一个JS外部脚本(标签),它停止代码(通常不是我的)像位置。如果不使用弹出窗口,就不会发生这种情况。我尝试了如下操作:

$(window).bind('beforeunload', function() {
 window.stop();
 event.stopImmediatePropagation();
 event.preventDefault();
 location.href = '#';  
 });

但似乎没有什么帮助。同样,我需要它而不使用:返回"are you sure?"也许是另一次回调?

谢谢,丹

使用onbeforeunload确认导航离开的正确方法是只返回您想要显示的消息字符串。MDN是这么说的

函数应该给Event对象的returnValue属性分配一个字符串值,并返回相同的字符串

所以你的onbeforeunload函数的行为,你要求将只是(相同的绑定它与jquery,特别是因为onbeforeunload不支持多个事件监听器像其他事件做)

window.onbeforeunload = function() {
    return "Are you sure?";
};

但讽刺的是,Firefox出于安全考虑不支持此功能。

注意,在Firefox 4和更高版本中,返回的字符串不会显示给用户。参见bug 588292。

编辑:我阅读了更多的bug报告。他们做出这个决定的主要原因是:"1。删除站点提供的文本,因为这是一个安全问题(浏览器对话框中不受信任的文本)。我想知道他们对alert有什么看法?

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

编辑2:我显然是错误的。只有一些的东西在onbeforeunload中是不允许的,它们只是碰巧主要是你在样本代码中尝试的类型,与事件传播和页面导航有关。从FF bug报告的评论深处,用户oyasumi发布了一个链接到这个jsFiddle的工作,为FF 4+用户显示自定义文本:http://jsfiddle.net/ecmanaut/hQ3AQ/所以显然调用alert()仍然是允许的,甚至在onbeforeunload中,滑稽的是,这正是"bug"修复"的原始原因:在浏览器/应用程序/操作系统/官方对话框中显示自定义文本。

您是否尝试使用"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();
    });
});

这里是链接http://jsfiddle.net/juTtG/143/