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

标签 javascript jquery location href

我想构建一个 JS 外部脚本(标记),它可以在不使用弹出窗口的情况下停止代码(通常不是我的),如 location.href。 我试过这样的事情:

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

但似乎没有任何帮助。 再次,我需要它而不使用: return "are you sure?" 也许是不同的回调?

谢谢, 丹

最佳答案

使用onbeforeunload 确认导航离开的正确方法是只返回您想要显示的消息的字符串。 MDN has this to say .

The function should assign a string value to the returnValue property of the Event object and return the same string

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

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

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

Note that in Firefox 4 and later the returned string is not displayed to the user. See bug 588292.

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

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

编辑 2:我显然是不正确的。在onbeforeunload 中只有一些 事情是不允许的,它们恰好主要是您在示例代码中尝试的事情类型,与事件传播和页面导航有关。来自 deep in the comments在该 FF 错误报告中,用户 oyasumi 发布了指向此 jsFiddle 的链接,其中包含用于向 FF 4+ 用户显示自定义文本的解决方法:http://jsfiddle.net/ecmanaut/hQ3AQ/所以显然调用 alert() 仍然被允许,即使在 onbeforeunload 中,这很有趣地做了“错误”“修复”的最初原因:显示自定义文本在浏览器/应用程序/操作系统/看起来像官方的对话框中。

关于javascript - 我可以在没有弹出窗口的情况下停止 JS location.href 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144899/

相关文章:

javascript - 使用 Javascript 或 jQuery 自动增加 HTML 表中的数据

javascript - NodeJ 需要 Apache 吗?

javascript - 使用 getScripts 异步获取 JavaScript

java - Android:间隔调用方法来检索最新的位置坐标

c# - GeoIpLocation - 如何获取州和县? (或者,如何从邮政编码获取州和县)C#

ios - NSLocationWhenInUseUsageDescription 警告,但我已经添加了它

javascript - JQuery 无法识别的表达式 [href=#undefined]

javascript - 谷歌地图 :Displaying address in infowindow

javascript - 如何在 Select2 中先设置占位符

javascript - 将 div 元素滑动到另一个元素 JQuery