Обезглавливание XMLHttpRequest.prototype.open и "касание" аргументов
Я пытаюсь установить патч обезьяны XMLHttpRequest.prototype.open
для сайта интрасети, работающего в режиме совместимости с IE8, но он продолжает бросать 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");
}
Здесь IE9 в режиме IE8 modern.ie виртуальный скриншот с поиском Google Image, пытающимся open
запрограммировать прокрутку обезьяны.
![enter image description here]()
Edit:
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 в любом режиме, который я пробовал, только в IE9, работающем в стандарте IE8.
Ответы
Ответ 1
Недавно я увидел пример переопределения XMLHttpRequest.prototype.open
с немного другим подходом, чем ваш;
(function(open) {
XMLHttpRequest.prototype.open = function() {
// your special sauce
open.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
Можете ли вы проверить и посмотреть, действует ли это так иначе?
Ответ 2
var XHR = XMLHttpRequest.prototype;
XHR.open = function (method, url) {
//do stuff
return open.apply(this, arguments);
};