3

Ceci est partiellement une demande de solution de contournement, et en partie une tentative pour faire passer le mot que l'implémentation du prototype d'Internet Explorer est toujours défectueuse.Internet Explorer 8 prototypes et XMLHttpRequest

Le code suivant ne fonctionne pas sur Internet Explorer.

XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open; 
var x = new XMLHttpRequest(); 
x.old("POST", "test", false); 

Pour IE 8 bêta, et toutes les versions précédentes, la propriété XMLHttpRequest.prototype n'a jamais existé en premier lieu. Dans IE8, il existe, mais vous obtiendrez une erreur "Appel ou argument de procédure non valide". Internet Explorer n'aime pas la décoration.

Est-ce que quelqu'un sait d'une solution de contournement pour cela?

Mise à jour:

Il a été signalé que je pouvais passer outre l'ensemble de XMLHttpRequest avec une nouvelle fonction et constructeur, puis créer un script wrapper ala XMLHttpRequest.js. La méthode du prototype est beaucoup plus courte, donc je préfère toujours l'utiliser pour les navigateurs non IE.

+0

Avez-vous parlé à Microsoft? –

+0

Pas encore. Je ne suis pas sûr d'avoir la patience de comprendre les canaux de signalement de bogues de Microsoft. –

+0

Je ne me dépêche pas, pense que j'ai vu un rapport qui s'est fermé sans commentaire. – Ross

Répondre

2

Le problème semble être que IE 8 reconnaît XMLHttpRequest, mais pas en tant que fonction. Les objets X actifs semblent toujours fonctionner. Au lieu de tester l'existence de window.XMLHtppRequest, je teste le typeof window.XMLHtppRequest. semble fonctionner correctement.

Je recodé ma demande get comme suit:

FG.ajax.getxhr = function(){ 
var xhr; 
if (typeof window.XMLHttpRequest === 'function') { 
    xhr = XMLHttpRequest(); 
} 
else { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
return xhr; 
Questions connexes