【问题标题】:Break when window.location changes? [duplicate]window.location 更改时中断? [复制]
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 这很有用,除了在我的情况下它只是说“其他”。不是很有帮助,Chrome。 :/
  • 哇!我不知道。谢谢:)
  • 那么当它只显示“其他”时你会怎么做?似乎没有解决方案。
  • 我遇到了完全相同的问题,在我的情况下,这是负责<meta http-equiv="refresh" content="5">,在头部部分定义。它被报告为发起者Other
  • 在我的情况下,表单提交也报告为Other forgot onsubmit="event.preventDefault()"
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2016-01-14
  • 2022-12-06
相关资源
最近更新 更多