Estoy desarrollando una aplicación JavaScript que debe ejecutarse desde un servidor web (a través de http) o desde el sistema de archivos (en un archivo: // URL).Leer archivo: // URLs en IE XMLHttpRequest
Como parte de este código, necesito usar XMLHttpRequest para cargar archivos en el mismo directorio que la página y en los subdirectorios de la página.
Este código funciona bien ("PASS") cuando se ejecuta en un servidor web, pero no funciona ("FAIL") en Internet Explorer 8 cuando se ejecuta fuera del sistema de archivos:
<html><head>
<script>
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.open("GET", window.location.href, false);
xhr.send(null);
if (/TestString/.test(xhr.responseText)) {
document.body.innerHTML="<p>PASS</p>";
}
}
</script>
<body><p>FAIL</p></body>
Por supuesto , al principio falla porque no se pueden ejecutar scripts en absoluto en el sistema de archivos; al usuario se le solicita una barra amarilla, advirtiendo que "Para ayudar a proteger su seguridad, Internet Explorer ha restringido que esta página web ejecute scripts o controles ActiveX que podrían acceder a su computadora".
Pero incluso una vez que hago clic en la barra y "Permitir contenido bloqueado" la página sigue fallando; Aparece un error de "Acceso denegado" en la llamada xhr.open.
Esto me desconcierta, porque MSDN dice que "para fines de desarrollo, el protocolo file: // está permitido desde la zona de Máquina local". Este archivo local debe ser parte de la zona de máquina local, ¿verdad?
¿Cómo puedo obtener un código como este para que funcione? Estoy bien con avisar al usuario con advertencias de seguridad; No estoy de acuerdo con forzarlos a desactivar la seguridad en el panel de control.
EDITAR: No estoy, de hecho, cargando un documento XML en mi caso; Estoy cargando un archivo de texto plano (.txt).
¿Ha intentado var xhr = new ActiveXObject ("MSXML2.XMLHTTP"); (ver mi respuesta a continuación)? Eso no debe limitarse a archivos XML. Pero estará limitado a IE. – Don
FWIW, tengo el mismo problema en Chrome haciendo básicamente lo mismo. – apollodude217