【问题标题】:Catching/Overriding a Javascript redirect捕获/覆盖 Javascript 重定向
【发布时间】:2025-11-22 05:45:02
【问题描述】:

我将如何覆盖/捕获 javascript 重定向?

例如:

window.location.href="http://example.com";

值“http://example.com”将被捕获并可能被更改。

【问题讨论】:

标签: javascript html dom redirect href


【解决方案1】:

AFAIK 你可以捕捉到这个事件,但你不能改变目标 url。如果他想取消重定向,您只能提示用户。为此,您可以订阅before unload event

window.onbeforeunload = function (e) {
    var e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'Are you sure you want to leave the site?';
    }

    // For Safari
    return 'Are you sure you want to leave the site?';
};

【讨论】:

  • 好吧,如果你能抓住它,你可以改变目标:返回 false,因此取消事件并使用正确的 URL 触发一个新的事件...
  • @Boldewyn:Returnign false 不应该工作。您必须只返回一个字符串。
  • 确实如此,我已经尝试过了,虽然我不知道如何获得目标。我只会在万不得已的情况下使用这个答案。
  • 事件e 似乎不包含目标网址。
【解决方案2】:

您可以尝试使用__defineSetter()__,但它可能不适用于主机对象。

【讨论】:

  • 谢谢,我不完全确定如何使用这个,你可以提供一个小例子吗?
【解决方案3】:

找到所有使用这个的代码:

window.location.href="http://example.com";

并将其更改为:

openURL("http://example.com");

然后,实现这个功能,您可以随意控制重定向:

function openURL(url) {
    // examine url and decide if you want to modify it
    window.location = url;
}

【讨论】:

  • 一些我无法控制的调用,所以我需要一种方法来捕获任意重定向。
  • 我不知道有什么方法可以从普通 javascript 捕获所有浏览器中的任意 javascript 重定向。