Programmatically disable window.location.reload?
Asked Answered
V

2

9

Is there a way to override default behavior of window.location.reload - making it a no-op, for debugging purposes?

Vardon answered 5/3, 2011 at 15:6 Comment(4)
My first guess was window.location.reload = function() {} but this doesn't work, at least on Firefox.Abbreviate
Should be possible - see Javascript - override or prevent executionRaceway
window.location.reload = function() {} works on Firefox 4Baa
@YiJiang Not in my Firefox 4+: [14:27:19.242] Error: Permission denied to shadow native propertyNeddy
E
11

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.

Eckard answered 6/3, 2011 at 7:14 Comment(2)
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
O
3

you have to call this code in a self-calling-function unless it won't work.

(function(location){
   ...
})(window.location);
Okun answered 8/10, 2012 at 12:58 Comment(1)
This also fails silently in ChromeCheiron

© 2022 - 2024 — McMap. All rights reserved.