有没有办法覆盖window.location.reload的默认行为 - 使其成为无操作,用于调试目的?
答案 0 :(得分:8)
问题在于,由于某种原因,location.reload
实际上不是Firefox和Chrome中的可写属性。这是我想出来的一些疯狂方式,在这些浏览器中覆盖它(和其他人)。它使用非标准.__defineGetter__()
方法,部分是为了绕过干扰的window.location = "/home.html"
的魔力。
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(){});
生成的模拟对象应该阻止任何函数调用(包括.reload
)或赋值(设置.href
)实际生效。或者,您可以将测试限制为IE,Safari和Opera,其中.reload
是可写的。
答案 1 :(得分:3)
你必须在自我调用函数中调用此代码,除非它不起作用。
(function(location){
...
})(window.location);