web-dev-qa-db-fra.com

Arrêter lorsque window.location change?

J'ai une page qui redirige alors qu'elle ne devrait pas l'être, et j'essaie de comprendre qui le fait. J'ai d'abord essayé le détournement de 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));

Cela ne fonctionnait pas du tout dans Chrome. Vous ne pouvez pas faire de setters et de getters sur window.location pour des raisons de sécurité. D'ACCORD. La prochaine chose que j'ai essayée a été d'observer le déchargement et le déchargement:

['unload', 'beforeunload'].forEach(function (evName) {
    window.addEventListener(evName, function () {
        debugger; // Chance to check everything right before the redirect occurs
    });
});

Je savais que la valeur de window.location resterait la même jusqu'à ce que l'événement onunload, à nouveau pour des raisons de sécurité, mais j'espérais un autre indice; pas de chance. J'ai ensuite essayé de mettre des points d'arrêt à chaque point que je peux trouver dans mes propres scripts où window.location pourrait éventuellement être attribué. Aucun d'eux n'est touché selon le Chrome. Argh. Cette redirection ne se produit pas dans FF, d'ailleurs, et j'ai déjà essayé de redémarrer Chrome. J'ai l'impression d'avoir vraiment tout essayé et ne suis arrivé nulle part, ce qui signifie, je l'espère, que je suis sur le point de passer au niveau de développeur?

Existe-t-il un moyen dans un navigateur pour moi, l'homme qui utilise le débogueur, de rompre la ligne qui redirige l'emplacement de la page? Je comprends qu'il y a des implications de sécurité pour permettre l'accès automatique à ces informations, mais n'y a-t-il rien qui privilégie le développeur et qui permette un moyen de le faire? Sinon, quelle est la manière normale de gérer une situation comme celle-ci? Cela semble assez courant et je ne pense pas que quiconque aime se faire bloquer pendant des heures ou des jours sur un problème conceptuellement simple. TIA

62
PC Jones

L'onglet Réseau vous aide, activez la case à cocher conserver le journal, la colonne de l'initiateur contiendra l'emplacement javascript qui a provoqué la redirection.

32
Martijn