web-dev-qa-db-fra.com

SCRIPT5: l'accès est refusé dans IE9 sur xmlhttprequest

var xhttp=new XMLHttpRequest();
xhttp.open('GET', 'foo.xml', false);

F12 réapparaît: SCRIPT5: l'accès est refusé. sur la ligne 95, qui est la ligne xhttp.open.

Mon JavaScript semble bien formé et Firefox fait ce que je pense devoir faire.

J'ai lu beaucoup de questions très similaires à celle-ci, j'ai donc vérifié la règle de la même origine, mais je ne vois pas comment elle s'appliquerait, vu que foo.xml se trouve dans le même répertoire que le fichier html. J'ai ouvert les autorisations de script sur mon intranet local et ai demandé à McAfee de prendre une pause de cinq minutes, pour en être sûr. J'ai même essayé d'exécuter IE en tant qu'administrateur, donc cela ne peut pas vraiment être un problème d'autorisations. Pourquoi sinon IE se verrait refuser l'accès à un fichier local ?

46
Eric L
13
Horst Walter

Cet exemple montre comment utiliser AJAX pour extraire des ressources de n’importe quel site Web. Il fonctionne sous différents navigateurs. Je l’ai testé sur IE 8-IE 10, safari, chrome, firefox, opéra.

if (window.XDomainRequest) xmlhttp = new XDomainRequest();
else if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.open("GET", "http://api.hostip.info/get_html.php", false);
xmlhttp.send();

hostipInfo = xmlhttp.responseText.split("\n");
var IP = false;
for (i = 0; hostipInfo.length >= i; i++) {
    if (hostipInfo[i]) {

        ipAddress = hostipInfo[i].split(":");
        if (ipAddress[0] == "IP") {
            IP = ipAddress[1];
        }
    }
}
return IP;
5
Philips
5
EricLaw

Ce message d'erreur (SCRIPT5: l'accès est refusé.) Peut également être rencontré si la page cible d'une méthode .replace n'est pas trouvée (j'avais mal saisi le nom de la page). Je le sais parce que cela m’est juste arrivé, c’est pourquoi j’ai cherché plus d’informations sur la signification du message d’erreur.

3
Rockwell1960

Sous IE7, IE8 et IE9, allez simplement dans Paramètres-> Options Internet-> Sécurité-> Personnaliser le niveau et modifiez les paramètres de sécurité sous "Divers", puis "Activer" pour accéder aux sources de données sur plusieurs domaines.

3
Walid Ibrahim

Très probablement, vous devez avoir le Javascript servi sur SSL.

Source: https://www.parse.com/questions/internet-Explorer-and-the-javascript-sdk

1
Brenden

Je pense que le problème est que le fichier se trouve sur votre ordinateur local et que IE refuse l'accès, car si les scripts avaient accès aux fichiers de la composition sur laquelle le navigateur s'exécute, cela être un énorme trou de sécurité.
Si vous avez accès à un serveur ou à une autre composition que vous pourriez utiliser en tant que tel, vous pourriez peut-être essayer de placer les fichiers dessus, puis d’exécuter les scripts comme vous le feriez d’un site Web.

0
Nate Koppenhaver

Vous demandez probablement une ressource externe, ce cas IE a besoin de l'objet XDomain. Consultez l'exemple de code ci-dessous pour savoir comment faire une demande ajax pour tous les navigateurs comportant plusieurs domaines:

Tork.post = function (url,data,callBack,callBackParameter){
    if (url.indexOf("?")>0){
        data = url.substring(url.indexOf("?")+1)+"&"+ data;
        url = url.substring(0,url.indexOf("?"));
    }
    data += "&randomNumberG=" + Math.random() + (Tork.debug?"&debug=1":"");
    var xmlhttp;
    if (window.XDomainRequest)
    {
        xmlhttp=new XDomainRequest();
        xmlhttp.onload = function(){callBack(xmlhttp.responseText)};
    }
    else if (window.XMLHttpRequest)
        xmlhttp=new XMLHttpRequest();
    else
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            Tork.msg("Response:"+xmlhttp.responseText);
            callBack(xmlhttp.responseText,callBackParameter);
            Tork.showLoadingScreen(false);
        }
    }
    xmlhttp.open("POST",Tork.baseURL+url,true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send(data);
}
0
Orhun Alp Oral

J'avais affronté le même problème sur IE10. J'ai eu une solution de contournement en utilisant la demande ajax jQuery pour récupérer des données:

$.ajax({
    url: YOUR_XML_FILE
    aync: false,
    success: function (data) {   
        // Store data into a variable
    },
    dataType: YOUR_DATA_TYPE,
    complete: ON_COMPLETE_FUNCTION_CALL
});
0
gautam