¿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?
Respuesta
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.
No funciona en Opera 11.60: "' Error no controlado: __defineGetter__: inválido modificación de propiedad no configurable' ". – XP1
Se produce un error silencioso en Chrome –
Ahora falla con un error en Chrome. – MasterScrat
tiene que llamar a este código en una función de auto llamada a menos que no funcione.
(function(location){
...
})(window.location);
Esto también falla silenciosamente en Chrome –
- 1. Magento, ¿cómo deshabilitar el módulo mediante programación?
- 2. Habilitar/deshabilitar mediante programación la conexión
- 3. Deshabilitar mediante programación el bloqueo de mayúsculas
- 4. ¿Puedo deshabilitar un panel de actualización mediante programación?
- 5. cómo deshabilitar la corrección ortográfica mediante programación en android
- 6. UIWebView deshabilita el acercamiento mediante programación
- 7. Cómo reiniciar mediante programación?
- 8. creando uiview mediante programación?
- 9. Agregar PageControl mediante programación
- 10. Generar propiedades mediante programación
- 11. mediante programación en C#
- 12. Editando Web.config mediante programación
- 13. ¿Consulta mediante programación MSDN?
- 14. MapActivity: establecer APIKey mediante programación
- 15. Conexión a TFSPreview mediante programación
- 16. establecer mediante programación Android: layout_centerHorizontal
- 17. ImageBrush de cuadrícula mediante programación
- 18. Encender la pantalla mediante programación
- 19. agregar mediante programación gatillo estilo
- 20. ¿Iniciar Scala REPL mediante programación?
- 21. resolver ecuaciones funcionales mediante programación
- 22. Desconexión Jersey registro mediante programación
- 23. Cómo ejecutar NUnit mediante programación
- 24. crear mediante programación un UILabel
- 25. Inspeccionar mediante programación archivos .class
- 26. aumentar mediante programación un comando
- 27. Obtener página actual mediante programación
- 28. Crear mediante programación HTML5 Canvas
- 29. Editando Info.plist posible mediante programación?
- 30. Mover el mouse mediante programación
Mi primera conjetura fue 'window.location.reload = function() {}' pero esto no funciona, al menos en Firefox. –
Debería ser posible - ver [Javascript - anular o evitar la ejecución] (http://stackoverflow.com/questions/850090/javascript-override-or-prevent-execution) –
'window.location.reload = function() {} 'funciona en Firefox 4 –