web-dev-qa-db-fra.com

Accès refusé au script jQuery sur IE

J'ai un iframe utilisant le script jQuery 1.4.2. Le même iframe est injecté dans les sites http et https. Le script jQuery est inclus dans le fichier HTML principal en tant que chemin relatif (par exemple, /scripts/jquery-1.4.2.min.js).

Lorsqu'un appel AJAX est effectué, Internet Explorer refuse l'accès. Le AJAX appelle un autre sous-domaine, mais utilise le bon protocole. Tous les autres navigateurs fonctionnent mais Internet Explorer donne l'erreur suivante:

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

J'ai entendu que cette erreur provenait de plusieurs domaines AJAX appels. Mais pourquoi est IE le seul qui me donne de la merde? Y a-t-il un IE solution?

C'est aussi mon AJAX:

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

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

44
Rafay

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

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

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

9
Kevin Leary

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

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

4
matthieuR42

J'ai changé mon JQuery de la version 1.10.1 à 1.10.2 et il semble avoir résolu ce problème pour moi.

2
Trolloc

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

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

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

2
James Becwar

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 requête de script. Un en-tête de plus à 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.

2
Furqan Hameedi

J'étais confronté à un problème similaire. J'utilisais le contrôle de téléchargement de fichier mais il était caché et j'avais un autre élément essayant de contrôler le téléchargement de fichier et les événements pour télécharger le fichier de manière ajax

essayez d'utiliser directement le contrôle de téléchargement de fichiers. ce problème résolu dans ma demande.

2
iCoder

Je reçois ce bug (et donc google ici) mais la raison était très différente. Donc, si vous n'avez pas de site croisé et obtenez toujours cette erreur d'accès refusé: revérifiez valeur envoyé
disons que vous affectez l'une de vos variables avec la mauvaise expression suivante:

urlVar = $("theID").val // without () this was the error!

[...] appel ajax:

data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},

Google/FF n'ont aucun problème avec cela (vérifiez ce qui est reçu côté serveur ...) MAIS IE refusez d'envoyer cela!

2
Emmanuel Gleizer

Ajoutez simplement 'callback =?' sur votre demande d'URL ajax comme ici: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html

0
AzuraStar

Il semble que les États membres trouvent leur propre façon de faire les choses, plutôt que d'adopter des recommandations de l'industrie. J'ai trouvé la solution ici:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

0
Jez D