2012-05-04 4 views
2

Мне нужно сделать подделку window.location = "testCall", чтобы создать событие для обхода параметров на мобильном устройстве. Однако, как родной, мне нужно рассеять исключение NotFound или в основном рассеять поддельный вызов window.location. Возможное? Спасибоjavascript window.location fake callback

+0

Это будет работать, только если страница вернула ошибку 400, что во многих случаях не будет. – Anthony

+0

Я должен симулировать событие window.location без перенаправления на ... – Jaume

ответ

5
Object.getOwnPropertyDescriptor(window, 'location').configurable === false 

в Chrome и Safari (и я предполагаю, что в других браузерах). Похоже, вы не можете изменить собственное поведение.

Если он вел себя как нормальный ECMAScript 5 собственности и configurable был установлен true, чем вы могли бы сделать что-то вроде этого:

var descriptor = Object.getOwnPropertyDescriptor(window, 'location'); 
var setter = descriptor.set; // Doesn't exist although it should in spirit of ES5 

descriptor.set = function (newLocation) { 
    try { 
     setter(newLocation); 
    } catch (e) { 
     console.log('Location error: ', newLocation, e); 
    } 
}; 

// The line below will throw exception in real browser :(
// TypeError: Cannot redefine property: location 
Object.defineProperty(window, 'location', descriptor); 

Я надеюсь, что производители браузеров перенести все свои магические свойства и объекты в стандартный EcmaScript, но на данный момент нам не повезло.

Смежные вопросы