我需要进行假window.location = "testCall"
调用,以便生成一个事件来绕过移动设备上的参数。作为本机工作,然而,我需要解除一个NotFound异常或主要忽略一个假的window.location调用。可能?谢谢
答案 0 :(得分: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机制中,但目前我们运气不佳。