Программно отключить window.location.reload? - PullRequest
7 голосов
/ 05 марта 2011

Есть ли способ переопределить поведение по умолчанию window.location.reload - сделать его недоступным для целей отладки?

Ответы [ 2 ]

8 голосов
/ 06 марта 2011

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

3 голосов
/ 08 октября 2012

Вы должны вызывать этот код в функции самозвонка, если он не будет работать.

(function(location){
   ...
})(window.location);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...