Sto tentando di eseguire il patch scimmia XMLHttpRequest.prototype.open
per un sito intranet in esecuzione in modalità di compatibilità IE8 ma continua a generare SCRIPT438: Object doesn't support this property or method
. La cosa strana è ... se io "toccare" la arguments
prima, vale a dire rimuovere il commento il bar
, funziona bene! Qualcuno sa perché e se toccarlo risolve effettivamente il problema nel 100% dei casi?Monkey patching XMLHttpRequest.prototype.open e argomenti "toccanti"
var foo = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
//var bar = arguments;
foo.apply(this, arguments);
console.log("OK");
}
Ecco l'IE9 in IE8 modalità modern.ie VM screenshot con Google Ricerca immagini cercando di open
una scimmia patch richiesta su scorrimento.
Edit:
console.log(foo);
//console.log(foo.apply);
console.log(typeof foo);
console.log(foo instanceof Function);
Returns
LOG:
function open() {
[native code]
}
LOG: object
LOG: false
Il console.log(foo.apply)
si getta "Object doesn't support this property or method"
.
Stranamente non posso replicare questo in un vero e proprio IE8 VM in qualsiasi modalità ho provato, solo in IE9 in esecuzione in modalità standard IE8.
Si può fare un 'console.log (foo.apply, typeof foo, foo instanceof Function)' forse? La mia ipotesi sarebbe che '.apply (this, arguments);' sia internamente ottimizzato, ma "toccare" 'arguments' * richiede * la creazione esplicita di un argomento object. E come puoi vedere dal possibile duplicato trovato da Quentin, IE è molto bizzarro sui "metodi" degli oggetti plugin. – Bergi
@ Grazie ringraziamenti, si prega di vedere la modifica per i ritorni di registro. –
Anche quando * accede a * '.apply' genera? Wow. Ma sì, qualcosa del genere è proprio quello che temevo. 'Function.prototype.apply.call (foo, argomenti)' funziona come soluzione alternativa? – Bergi