首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JavaScript中重写location.assign或location.replace函数?

如何在JavaScript中重写location.assign或location.replace函数?
EN

Stack Overflow用户
提问于 2012-02-13 18:24:55
回答 3查看 2.7K关注 0票数 4

我正在尝试覆盖location.assign函数,这样我就可以确保由它设置的URL始终是绝对的。但我似乎不能让它工作:当我按如下方式使用Xmlhttprequest.open时,它工作得很好:

代码语言:javascript
运行
复制
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来说,这种技术不起作用。这就是我正在尝试的:

代码语言:javascript
运行
复制
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来获得我想要的行为?

EN

Stack Overflow用户

发布于 2013-10-28 09:55:03

不能根据规范修改assign方法。请参阅WHATWG HTML生活标准中的The Location Interface

您将注意到为Location接口定义的[Unforgeable]扩展属性。这是在WebIDL中定义的:“它指示属性或操作将以某种方式反映为ECMAScript属性,这意味着它的行为不能被修改()”。请参见W3C WebIDL编辑器草稿中的[Unforgeable]

在尝试修改定义在同一个[Unforgeable]接口上的replace方法后,我发现了这个线程,但没有用。

票数 9
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9258866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档