Les appels Ajax ne fonctionnent pas dans IE sauf si vous manipulez les parameters de sécurité.

IE est nul, parfois. Avant IE 10, IE ne fournissait pas de support pour l’object XMLHttpRequest. Vous devez plutôt utiliser l’object XActiveXObject pour exécuter des appels AJAX. JQuery démarre cet object par défaut et le maintient tout au long d’une fonction ternaire s’il est présent (ce qui est tout le temps, essentiellement, si votre navigateur est IE).

Mais vous pouvez déjà voir le problème. Pour utiliser cet object ActiveX, vous devez modifier les parameters de sécurité dans IE afin d’autoriser les scriplets, les schémas ActiveX non signés, etc.

Existe-t-il un moyen de contourner ces parameters de sécurité (comme l’installation d’un fichier CAB pour signer le document sanglant) afin que les utilisateurs finaux n’aient pas à modifier les parameters de leur navigateur et que tout fonctionne comme prévu?

jQuery ne privilégie pas ActiveX par rapport à XMLHttpRequest dans Internet Explorer, comme vous le suggérez. Au lieu de cela, il vérifie sa présence, puis vérifie si le fichier a est un fichier local. Si l’une ou l’autre de ces conditions n’est pas remplie, une demande XHR standard est effectuée.

jQuery.ajaxSettings.xhr = window.ActiveXObject // If ActiveXObject exists, and the file is not local, return Standard XHR // If ActiveXObject exists, and the file is local, return ActiveXHR ? function() { return !this.isLocal && createStandardXHR() || createActiveXHR(); } // If ActiveXObject doesn't exist, use StandardXHR : createStandardXHR; 

Cette même chose pourrait presque s’écrire comme ceci:

 jQuery.ajaxSettings.xhr = (window.ActiveXObject && this.isLocal) ? createActiveXHR() : createStandardXHR(); 

J’espère que c’est plus facile à comprendre.

Je dois noter que cela a radicalement changé dans jQuery 2.0:

 jQuery.ajaxSettings.xhr = function() { try { return new XMLHttpRequest(); } catch( e ) {} }; 

Donc, voici ce que j’ai fait pour rectifier la situation. Ma question initiale était la suivante:

Comment faire un appel Ajax dans IE et le forcer à contourner les parameters de sécurité ActiveX.

Comme nous l’avons vu dans les commentaires ci-dessus, dans JQuery 1.8.2, ActiveXObject est utilisé pour IE SEULEMENT si ajaxsettings.isLocal est true, ce qui, dans ce cas, était. Nous ne prenons en charge rien au-dessous d’IE8 qui dispose d’une implémentation complète de XMLHttpRequest (qui n’utilise pas ActiveX, bien sûr) et je voulais donc m’assurer que Ajax utilisait TOUJOURS XMLHttpRequest.

J’ai donc modifié les parameters suivants au niveau global:

 $ajaxSetup({ isLocal: false }); 

Cela a amené IE à toujours considérer l’appel Ajax comme une multiplicité de domaines, ce qui a obligé JQuery à utiliser l’object XMLHttpRequest, évitant ainsi la nécessité de reconnaître les parameters de sécurité ActiveX d’IE, voire de s’en préoccuper.

Affaire classée.