以编程方式禁用window.location.reload?

时间:2011-03-05 15:06:41

标签: javascript

有没有办法覆盖window.location.reload的默认行为 - 使其成为无操作,用于调试目的?

2 个答案:

答案 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);