web-dev-qa-db-ja.com

window.locationが変更されたときに中断しますか?

本来あるべきではないときにリダイレクトしているページがあり、誰がそれを行っているのかを把握しようとしています。最初に、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でセッターとゲッターを実行することはできません。 OK。次に試したのは、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

62
PC Jones

[ネットワーク]タブが役立ちます。ログの保存チェックボックスをオンにすると、イニシエーター列にリダイレクトの原因となったjavascriptの場所が含まれます。

32
Martijn