2011-03-05 30 views
6

¿Hay alguna manera de anular el comportamiento predeterminado de window.location.reload, lo que lo convierte en una operación no operativa, con fines de depuración?Deshabilitar mediante programación window.location.reload?

+0

Mi primera conjetura fue 'window.location.reload = function() {}' pero esto no funciona, al menos en Firefox. –

+0

Debería ser posible - ver [Javascript - anular o evitar la ejecución] (http://stackoverflow.com/questions/850090/javascript-override-or-prevent-execution) –

+0

'window.location.reload = function() {} 'funciona en Firefox 4 –

Respuesta

7

El problema es que por alguna razón, location.reload efectivamente no es una propiedad de escritura en Firefox y Chrome. Aquí hay una manera loca en que surgió para anularlo (y otros) en esos navegadores. Utiliza el método no estándar .__defineGetter__(), en parte para eludir la magia de window.location = "/home.html" de interferir.

var _location = location; 
__defineGetter__('location', function() { 
    var s = new String(_location); 
    for(i in _location) (function(i) { 
     s.__defineGetter__(i, function() { 
      return typeof _location[i] == 'function' ? function(){} : _location[i]; 
     }); 
     s.__defineSetter__(i, function(){}); 
    })(i); 
    return s; 
}); 
__defineSetter__('location', function(){}); 

El resultante objeto mock debe impedir cualquier llamada de función (incluyendo .reload) o asignación (ajuste .href) de realidad teniendo efecto. Alternativamente, puede limitar sus pruebas a IE, Safari y Opera, en las cuales .reload es escribible.

+1

No funciona en Opera 11.60: "' Error no controlado: __defineGetter__: inválido modificación de propiedad no configurable' ". – XP1

+7

Se produce un error silencioso en Chrome –

+0

Ahora falla con un error en Chrome. – MasterScrat

3

tiene que llamar a este código en una función de auto llamada a menos que no funcione.

(function(location){ 
    ... 
})(window.location); 
+0

Esto también falla silenciosamente en Chrome –

Cuestiones relacionadas