window.location改变时中断?

时间:2012-06-25 18:18:47

标签: javascript google-chrome firebug google-chrome-devtools

我有一个页面,当它不应该重定向时,我正在试图找出谁在做这件事。首先我尝试劫持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

1 个答案:

答案 0 :(得分:30)

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