Programmatically disable window.location.reload?
Is there a way to override 开发者_运维百科default behavior of window.location.reload - making it a no-op, for debugging purposes?
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.
you have to call this code in a self-calling-function unless it won't work.
(function(location){
...
})(window.location);
精彩评论