2012-06-25 701 views
50

Tengo una página que está redireccionando cuando no debería, y estoy tratando de descubrir quién lo está haciendo. Primero intenté secuestro window.location:¿Se rompe cuando cambia 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)); 

Eso no funcionó en absoluto en Chrome. No puede hacer setters y getters en window.location por razones de seguridad. DE ACUERDO. La siguiente cosa que probé estaba observando onunload y onbeforeunload:

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

sabía que el valor de window.location permanecería igual hasta después del evento onunload, de nuevo por razones de seguridad, pero esperaba por alguna otra pista ; no tal suerte. A continuación, traté de poner puntos de corte en cada punto que puedo encontrar en mis propios guiones, donde posiblemente podría asignarse window.location. Ninguno de ellos recibe un golpe de acuerdo con el depurador de Chrome. Argh. Por cierto, esta redirección no está sucediendo en FF, y ya intenté reiniciar Chrome. Siento que realmente he intentado todo y no he llegado a ninguna parte, lo que espero significa que estoy a punto de subir de nivel como desarrollador. ¿Por favor?

¿Hay alguna forma en cualquier navegador para mí, el humano que opera el depurador, de romper en la línea que está redirigiendo la ubicación de la página? Entiendo que existen implicaciones de seguridad para permitir el acceso automático a esa información, pero ¿no hay nada que privilegie al desarrollador y permita una forma de hacerlo? Si no, ¿cuál es la forma normal de lidiar con una situación como esta? Parece bastante común y no creo que a nadie le guste bloquearse durante horas o días en un problema conceptualmente simple. TIA

+2

peor caso podría simplemente poner un punto de interrupción en algún lugar y luego pasar manualmente el código hasta que encuentre al delincuente –

+1

Cierto, y eso es lo que estoy haciendo ahora, pero como ejercicio considere el caso donde la redirección proviene dinámicamente etiqueta de script incluida: // Redirige a 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 '))) Es por eso que me pregunto si hay un truco para cortar el nudo gordiano, o si no, lo que hacen los profesionales para minimizar el tiempo que se gasta en problemas como este. –

+1

¿Alguna actualización sobre esto? Estoy intentando lo mismo. –

Respuesta

15

La pestaña Red le ayuda, active la casilla Guardar registro, la columna del iniciador contendrá la ubicación javascript que provocó la redirección.

+16

Esto sería útil, excepto en mi caso solo dice "Otro". No es muy útil, Chrome. ': /' – qJake

Cuestiones relacionadas