47 votes

Accès refusé au script jQuery sur IE

J'ai une iframe à l'aide de jQuery 1.4.2 script. La même iframe est injecté dans les deux http et https des sites. Le script jQuery est inclus dans le fichier HTML principal comme un chemin relatif (par exemple, /scripts/jquery-1.4.2.min.js).

Quand un appel AJAX est fait, Internet Explorer refuse l'accès. L'AJAX est l'appel sur un autre sous-domaine, mais c'est à l'aide de la droite de protocole. Tous les autres navigateurs, mais Internet Explorer donne l'erreur suivante:

SCRIPT5: l'Accès est refusé.
jquery-1.4.2.min.js, la ligne 127 344 caractères

J'ai entendu cette erreur est de l'inter-domaine des appels AJAX. Mais pourquoi est-à-dire la seule de me donner de la merde? Est-il un IE solution?

Aussi, c'est mon AJAX:

 $.ajax({
     url: thisURL,
     dataType: "json",
     data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
     success: function(ret){
         callback(ret)
     }
 });

45voto

3nigma Points 21164

IE vous oblige à utiliser XDomainRequest au lieu de XHR pour le cross site, vous pouvez essayer quelque chose comme ...

 if ($.browser.msie && window.XDomainRequest) {
            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("get", url);
            xdr.onload = function() {
                // XDomainRequest doesn't provide responseXml, so if you need it:
                var dom = new ActiveXObject("Microsoft.XMLDOM");
                dom.async = false;
                dom.loadXML(xdr.responseText);
            };
            xdr.send();
        } else {
            // your ajax request here
            $$.ajax({
                   url: thisURL,
                   dataType: "json",
                   data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
                   success: function(ret){
                               callback(ret)
                    }
            });

        }
 

Référence

http://forum.jquery.com/topic/cross-domain-ajax-and-ie

je ne sais pas si cela correspond à votre scénario

 xdr = new XDomainRequest(); 
xdr.onload=function()
{
    alert(xdr.responseText);
}
xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL 
//pass your data here
xdr.send([data]); 
 

vous pouvez trouver plus de conseils ici

9voto

Kevin Leary Points 919

Cela a résolu le problème avec élégance pour moi:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

Installez / compilez simplement après jQuery et avant votre script et utilisez la méthode $ .ajax comme vous le feriez normalement, le reste est géré automatiquement.

4voto

matthieuR42 Points 124

Avez-vous essayé d'utiliser la dernière version de JQuery (> jquery-1.8.0)? Depuis la version 1.8.0, ils ont résolu certains bugs de IE9. Peut-être celui-ci aussi.

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

2voto

Furqan Points 3015

Vérifiez le domaine auquel vous accédez, les en-têtes de réponse suivants devraient être là

 "Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin"  : "http://www.mydomain.com" or "*"
 

l'autre domaine doit autoriser votre demande de script. Un autre en-tête à ajouter à votre réponse est l'en-tête P3P.

 "p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
 

cela devrait vous aider.

2voto

Jbecwar Points 689

J'ai eu un problème similaire et la solution pour moi a été d'utiliser jsonp au lieu de json. De cette façon, je n'ai pas eu à sortir une version de client pour IE.

Vous pouvez faire cela seulement si le json serveur hôte prend en charge la demande de rappel variable ou vous avez accès au serveur et y ajouter la prise en charge. Voici une page qui m'a aidé à comprendre le processus. De ses .net mvc concentré, mais il donne une bonne vue de la différence entre le json et jsonp.

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X