2

我需要打一个假window.location = "testCall"电话以生成一个事件来绕过移动设备上的参数。像本机一样工作,但是,我需要关闭一个 NotFound 异常或主要关闭一个假的 window.location 调用。可能的?谢谢

4

1 回答 1

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 机制,但目前我们并不走运。

于 2012-05-04T13:06:14.250 回答