Is there a way to override default behavior of window.location.reload - making it a no-op, for debugging purposes?
Programmatically disable window.location.reload?
Asked Answered
The problem is that for some reason, location.reload
effectively is not a writable property in Firefox and Chrome. Here's some crazy way I came up with to override it (and others) in those browsers. It uses the non-standard .__defineGetter__()
method, in part to bypass the magic of window.location = "/home.html"
from interfering.
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(){});
The resulting mock object should prevent any function call (including .reload
) or assignment (setting .href
) from actually taking effect. Alternatively, you can limit your testing to IE, Safari, and Opera, in which .reload
is writable.
Won't work in Opera 11.60: "
Unhandled Error: __defineGetter__: invalid modification of non-configurable property
". –
Cutlerr That solution doesn't seem so crazy, but it doesn't seem to work in Chrome 99. –
Signature
you have to call this code in a self-calling-function unless it won't work.
(function(location){
...
})(window.location);
This also fails silently in Chrome –
Cheiron
© 2022 - 2024 — McMap. All rights reserved.
window.location.reload = function() {}
but this doesn't work, at least on Firefox. – Abbreviatewindow.location.reload = function() {}
works on Firefox 4 – Baa[14:27:19.242] Error: Permission denied to shadow native property
– Neddy