我正在尝试为在IE8兼容模式下运行的Intranet站点添加补丁XMLHttpRequest.prototype.open
,但它不断抛出SCRIPT438: Object doesn't support this property or method
。奇怪的是......如果我首先“触摸”arguments
,即取消注释bar
,它就可以了!有谁知道为什么,如果触摸它确实在100%的情况下解决了问题?
var foo = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
//var bar = arguments;
foo.apply(this, arguments);
console.log("OK");
}
以下是IE8模式中的IE9现代。使用Google图片搜索的VM屏幕截图,尝试open
滚动的猴子修补请求。
编辑:
console.log(foo);
//console.log(foo.apply);
console.log(typeof foo);
console.log(foo instanceof Function);
返回
LOG:
function open() {
[native code]
}
LOG: object
LOG: false
console.log(foo.apply)
投掷"Object doesn't support this property or method"
。
有趣的是,我无法在我试过的任何模式下在实际的IE8虚拟机中复制这个,只能在IE8标准模式下运行IE9。
答案 0 :(得分:0)
我刚刚看到一个XMLHttpRequest.prototype.open
被覆盖的例子,其方法与你的略有不同;
(function(open) {
XMLHttpRequest.prototype.open = function() {
// your special sauce
open.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
你能检查一下,看看这样做是否有所不同?
答案 1 :(得分:0)
var XHR = XMLHttpRequest.prototype;
XHR.open = function (method, url) {
//do stuff
return open.apply(this, arguments);
};