我正在尝试覆盖location.assign函数,这样我就可以确保由它设置的URL始终是绝对的。但我似乎不能让它工作:当我按如下方式使用Xmlhttprequest.open时,它工作得很好:
var oldOpen;
oldOpen = XMLHttpRequest.prototype.open;
// override the native open()
XMLHttpRequest.prototype.open = function(){
//Prepend our proxyURL
arguments[1] = prependURL+arguments[1];
// call the native open()
oldOpen.apply(this, arguments);
}但对于location.assign来说,这种技术不起作用。这就是我正在尝试的:
var old;
old = window.location.assign.prototype.constructor;
window.location.assign.prototype.constructor = function(){
console.log('dd');
console.log(arguments);
alert('ff');
}
old.apply(this,arguments);当我运行这段代码(我在Chrome中进行测试)时,结果是Uncaught TypeError: Illegal invocation。我如何重写location.assign来获得我想要的行为?
发布于 2013-10-28 09:55:03
不能根据规范修改assign方法。请参阅WHATWG HTML生活标准中的The Location Interface。
您将注意到为Location接口定义的[Unforgeable]扩展属性。这是在WebIDL中定义的:“它指示属性或操作将以某种方式反映为ECMAScript属性,这意味着它的行为不能被修改()”。请参见W3C WebIDL编辑器草稿中的[Unforgeable]。
在尝试修改定义在同一个[Unforgeable]接口上的replace方法后,我发现了这个线程,但没有用。
https://stackoverflow.com/questions/9258866
复制相似问题