我试图覆盖该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);
}
Run Code Online (Sandbox Code Playgroud)
但是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);
Run Code Online (Sandbox Code Playgroud)
当我运行这个(我正在Chrome中进行测试)时,结果是Uncaught TypeError: Illegal invocation.如何覆盖location.assign以获得我想要的行为?
根据assign规范不能修改该方法.请参阅WHATWG HTML Living Standard中的Location界面.
您会注意到[Unforgeable]为Location接口定义的扩展属性.这是在WebIDL中定义的:"它表示属性或操作将以某种方式反映为ECMAScript属性,这意味着其行为无法修改 ".请参阅[Unforgeable]W3C WebIDL编辑器的草稿.
在尝试修改replace在同一[Unforgeable]界面上定义的方法后,我发现此线程无济于事.
window.location.assign是一个函数 - 您尝试访问的原型就是function原型。请尝试以下操作:
var old;
old = window.location.assign;
window.location.assign = function(){
console.log('dd');
console.log(arguments);
alert('ff');
old.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2128 次 |
| 最近记录: |