我有一个页面在不应该重定向的时候被重定向,我试图找出是谁在做的。首先我尝试劫持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