2011-04-26 55 views
44
var xhttp=new XMLHttpRequest(); 
xhttp.open('GET', 'foo.xml', false); 

F12 aparece una copia de: script5: Acceso denegado. en la Línea 95, que es la línea xhttp.open.script5: Acceso denegado en IE9 en xmlhttprequest

Mi JavaScript parece estar bien formado, y Firefox hace lo que creo que debería.

He leído muchas preguntas muy similares a esta, así que he comprobado la Política de Mismo origen, pero no veo cómo se aplicaría considerando que foo.xml está en el mismo directorio que el archivo html Abrí los permisos de scripting en mi intranet local y le dije a McAfee que tomara un descanso de cinco minutos, solo para estar seguro. Incluso intenté ejecutar IE como administrador, así que esto no puede ser realmente un problema de permisos ¿o sí? ¿Por qué sino se le negaría a IE el acceso a un archivo local?

Respuesta

0

Creo que el problema es que el archivo está en su computadora local, y IE niega el acceso porque si permite que los scripts accedan a los archivos en la compilación en la que se ejecuta el navegador, sería un gran agujero de seguridad .
Si tiene acceso a un servidor u otro borrador que podría usar como uno, tal vez podría tratar de poner los archivos en eso y luego ejecutar los scripts como lo haría desde un sitio web.

+0

Curiosamente, si esto es cierto, IE tiene un agujero de seguridad grande - He descubierto que puedo cargar y manipular este archivo a través de la que se declara una isla de datos XML y usando datafld en línea. No es que me guste esta idea, pero es lo mejor que tengo ahora. –

0

Probablemente usted está solicitando para un recurso externo, este caso IE necesita el objeto XDomain Ver el código de ejemplo a continuación cómo hacer una petición Ajax para todos los navegadores con dominios cruzados:

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); 
} 
1

En IE7, IE8, IE9 y sólo tiene que ir a Preferencias-> Opciones de Internet-> Seguridad-> Nivel personalizado y cambiar la seguridad la configuración en "Varios" establece "Acceder a las fuentes de datos entre dominios" para Habilitar.

+51

-1 ya que no puede afectar las configuraciones que los usuarios tienen – Skurpi

+4

@Skurpi De acuerdo, bueno ese es el precio de usar IE. Con nuestra aplicación indicamos que solo Firefox y Chrome son compatibles. En caso de que nuestros clientes quisieran usar IE, entonces necesitan asegurarse de que esta configuración esté habilitada, voluntariamente, nuestros clientes de IE cambiaron sus configuraciones. –

+0

Al intentar ejecutar XMLHTTPRequest desde un bookmarklet, seguí recibiendo este error de acceso denegado. Cuando ejecuté el script en una página, funcionó bien. Esta fue la única solución que funcionó. Win 7 IE 9. – thefoyer

4

Este ejemplo ilustra cómo utilizar AJAX para tirar resourcess de cualquier sitio web. funciona en todos los navegadores. lo he probado en IE8-IE10, safari, cromo, firefox, opera.

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

No funciona con HTTPS –

2

Este mensaje de error (script5:. Acceso denegado) también se pueden encontrar si no se encuentra la página de destino de un método .replace (que había entrado en el nombre de la página de forma incorrecta). Lo sé porque me pasó a mí, por lo que fui en busca de más información sobre el significado del mensaje de error.

+1

¿Qué quiere decir con "reemplazar método"? Tengo este mensaje de error, pero no pude entender qué lo causó. –

0

Me he encontrado con un problema similar en IE10.Tenía una solución mediante el uso de la petición Ajax jQuery para recuperar datos:

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

Abra la herramienta de desarrollador Internet Explorer, Herramientas -> herramientas de desarrollo F12. (Creo que también puede pulsar F12 conseguirlo)

Cambiar el modo de documento a Normas. (La página debe actualizarse automáticamente, si cambia el Document Mode)

El problema debe solucionarse. Disfruta

-1
$.ajax({ 
     url: '//freegeoip.net/json/', 
     type: 'POST', 
     dataType: 'jsonp', 
     success: function(location) { 
      alert(location.ip); 
     } 
    }); 

Este código funcionará sitios https demasiado