我想构建一个JS外部脚本(标记),它可以在不使用弹出窗口的情况下停止代码(通常不是我的),就像location.href一样。 我尝试过这样的事情:
$(window).bind('beforeunload', function() {
window.stop();
event.stopImmediatePropagation();
event.preventDefault();
location.href = '#';
});
但似乎没有任何帮助。 再一次,我需要它而不使用:return“你确定吗?” 也许是一个不同的回调?
谢谢, 丹
答案 0 :(得分:1)
使用onbeforeunload
确认导航的正确方法是返回您想要显示的消息的字符串。 MDN has this to say
该函数应将字符串值赋给Event对象的returnValue属性并返回相同的字符串
因此,您所要求的行为的onbeforeunload
函数就是(与使用jquery绑定它相同,特别是因为onbeforeunload不像其他事件那样支持多个事件侦听器)
window.onbeforeunload = function() {
return "Are you sure?";
};
但具有讽刺意味的是,出于安全考虑,Firefox不支持此功能。
请注意,在Firefox 4及更高版本中,返回的字符串不会显示给用户。请参阅bug 588292。
编辑:我阅读了更多错误报告。他们做出此决定的主要原因是:“1。删除站点提供的文本,因为这是一个安全问题(浏览器对话框中的不受信任的文本)”。我想知道他们对alert
感觉如何?
大多数现代浏览器(Chome,IE 9+或更早版本,以及Opera,我确定知道)将忽略您在onbeforeunload
函数中尝试执行的任何操作,而不是返回要显示的字符串。这是为了防止劫持用户浏览器,打开弹出窗口,通过将用户指向另一个,可能是恶意域等来覆盖导航尝试。
编辑2:我显然不正确。在onbeforeunload
中只允许某些事物,它们恰好主要是您在示例代码中尝试过的事物类型,与事件传播和页面导航有关。从该FF错误报告的deep in the comments开始,用户oyasumi发布了一个指向此jsFiddle的链接,并向FF 4+用户显示自定义文本:http://jsfiddle.net/ecmanaut/hQ3AQ/因此显然仍然允许调用alert()
,即使在onbeforeunload
中,这也正好与“错误”修复“的原因完全相同:在浏览器/应用程序/操作系统/官方外观对话框中显示自定义文本。
答案 1 :(得分:-1)
<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();
});
});