リダイレクトすべきでないときにリダイレクトしているページがあり、誰がリダイレクトしているのかを突き止めようとしています。まず、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 でセッターとゲッターを実行することはできません。わかった。次に試したのは、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 を再起動しようとしました。私は本当にすべてを試してみて、どこにも行かなかったように感じます。これは、開発者としてレベルアップしようとしていることを意味しますか? お願いします?
デバッガーを操作している人間が、ページの場所をリダイレクトしている行を中断する方法はありますか? その情報への自動アクセスを許可することにはセキュリティへの影響があることは理解していますが、開発者に特権を与え、それを行う方法を許可するものは何もありませんか? そうでない場合、このような状況に対処する通常の方法は何ですか? それはよくあることのように思えますし、概念的に単純な問題で何時間も何日もブロックされるのを好む人はいないと思います。ティア