Sto sviluppando un'applicazione JavaScript che deve essere eseguita da un server Web (su http) o dal file system (su un file: // URL).Leggi file: // URL in IE XMLHttpRequest
Come parte di questo codice, è necessario utilizzare XMLHttpRequest per caricare i file nella stessa directory della pagina e nelle sottodirectory della pagina.
Questo codice funziona bene ("PASS") quando eseguito su un server web, ma non funziona ("FAIL") in Internet Explorer 8 quando scappare il file system:
<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>
Naturalmente , all'inizio fallisce perché nessun script può essere eseguito sul file system; All'utente viene visualizzata una barra gialla, che avverte che "Per proteggere la sicurezza, Internet Explorer ha limitato questa pagina Web dall'esecuzione di script o controlli ActiveX che potrebbero accedere al computer."
Ma anche una volta che faccio clic sulla barra e "Consenti contenuto bloccato" la pagina continua a fallire; Ricevo un errore "Accesso negato" sulla chiamata xhr.open.
Questo mi imbarazza, perché MSDN dice che "Per scopi di sviluppo, il protocollo file: // è consentito dall'area Computer locale". Questo file locale dovrebbe far parte della zona macchina locale, giusto?
Come posso ottenere un codice come questo per funzionare? Sto bene con la richiesta all'utente di avvertimenti di sicurezza; Non sto bene costringendoli a disattivare la sicurezza nel pannello di controllo.
MODIFICA: Non sto, infatti, caricando un documento XML nel mio caso; Sto caricando un file di testo normale (.txt).
Hai provato var xhr = new ActiveXObject ("MSXML2.XMLHTTP"); (vedi la mia risposta qui sotto)? Questo non dovrebbe essere limitato ai file XML. Ma sarà limitato a IE. – Don
FWIW, ho lo stesso problema in Chrome facendo praticamente la stessa cosa. – apollodude217