74

我有一个页面在不应该重定向的时候被重定向,我试图找出是谁在做的。首先我尝试劫持window.location:

window.location = (function (location) {
    // location is now hidden inside a closure. We can override it
    var Location = Object.create(location);
    // Location is now our proxy. We can use it to catch changes
    window.__defineGetter__('location', function () { return Location });
    window.__defineSetter__('location', function (x) { debugger; location = x; return x; });
    // etc etc, considered assignments to location.href, location.search, location.host etc., as well as calls to location.replace and location.assign
}(window.location));

这在 Chrome 中根本不起作用。出于安全原因,您不能在 window.location 上执行 setter 和 getter。好的。我尝试的下一件事是观察 onunload 和 onbeforeunload:

['unload', 'beforeunload'].forEach(function (evName) {
    window.addEventListener(evName, function () {
        debugger; // Chance to check everything right before the redirect occurs
    });
});

我知道 window.location 的值会保持不变,直到 onunload 事件之后,再次出于安全原因,但我希望有其他线索;没有这样的运气。接下来,我尝试在我自己的脚本中可以找到的每个可能分配 window.location 的点放置断点。根据 Chrome 调试器,它们都没有被命中。啊。顺便说一句,这种重定向在 FF 中没有发生,我已经尝试重新启动 Chrome。我觉得我真的什么都试过了,但一无所获,这有希望意味着我即将升级为开发人员吗?请?

对于我(操作调试器的人)来说,在任何浏览器中是否有任何方法可以中断重定向页面位置的行?我知道允许自动访问该信息存在安全隐患,但是没有什么可以授予开发人员特权并允许这样做吗?如果不是,那么处理这种情况的正常方法是什么?这似乎很常见,我认为没有人喜欢在概念上简单的问题上被阻止数小时或数天。TIA

4

1 回答 1

49

网络选项卡可以帮助您,打开保留日志复选框,启动器列将包含导致重定向的 javascript 位置。

于 2014-09-08T23:15:28.043 回答