【发布时间】:2012-06-27 00:59:20
【问题描述】:
我有一个页面在不应该重定向的时候进行了重定向,我正试图找出是谁在做的。首先我尝试劫持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
【问题讨论】:
-
最坏的情况,你可以在某处放置一个断点,然后手动单步执行代码,直到找到违规者
-
没错,这就是我现在正在做的事情,但作为练习,请考虑重定向来自动态包含的脚本标签的情况: // 重定向到 google.com document.body.appendChild( document.createElement('script'))。 appendChild(document.createTextNode(decodeURIComponent('%77%69%6e%64%6f%77%2e%6c%6f%63%61%74%69%6f%6e%2e%61%73%73%69% 67%6e%28%27%68\ %74%74%70%3a%2f%2f%77%77%77%2e%67%6f%6f%67%6c%65%2e%63%6f%6d %27%29'))) 这就是为什么我想知道是否有什么诀窍可以打破僵局,或者如果没有,专业人士会采取哪些措施来最大限度地减少花在此类问题上的时间。
-
这有什么更新吗?我正在尝试同样的事情。
-
stackoverflow.com/questions/12360187/… 不是同一个问题,并且没有这个问题的答案...
-
是的,堆栈溢出的一个可笑之处在于人们可以出现并标记不存在的重复项,并且似乎没有办法取消标记它。
标签: javascript google-chrome firebug google-chrome-devtools