Проблема в том, что по какой-то причине 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
доступен для записи.