Я разрабатываю приложение JavaScript, предназначенное для запуска либо с веб-сервера (через http), либо из файловой системы (по файлу: // URL).Читать файл: // URL в IE XMLHttpRequest
В качестве части этого кода мне нужно использовать XMLHttpRequest для загрузки файлов в том же каталоге, что и страница и в подкаталоги страницы.
Этот код работает отлично («PASS») при выполнении на веб-сервере, но не работает («FAIL») в Internet Explorer 8 при запуске от файловой системы:
<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>
Конечно , сначала он терпит неудачу, потому что никакие скрипты вообще не могут запускаться в файловой системе; пользователю предлагается желтая полоса, предупреждая, что «Чтобы защитить вашу безопасность, Internet Explorer ограничил эту веб-страницу запуском скриптов или элементов ActiveX, которые могли бы получить доступ к вашему компьютеру».
Но даже когда я нажимаю на панель и «Разрешить блокировку содержимого», страница все еще не работает; Я получаю сообщение об ошибке «Отказано в доступе» при вызове xhr.open.
Это меня озадачивает, потому что MSDN говорит, что «Для целей разработки протокол протокола: // разрешен в зоне локального компьютера». Этот локальный файл должен быть частью зоны локального компьютера, не так ли?
Как я могу заставить код работать? Я в порядке, предлагая пользователю предупреждения о безопасности; Я не в порядке, заставляя их отключать безопасность в панели управления.
EDIT: Я действительно не загружаю XML-документ в свой случай; Я загружаю простой текстовый файл (.txt).
Вы попробовали var xhr = new ActiveXObject ("MSXML2.XMLHTTP"); (см. мой ответ ниже)? Это не должно ограничиваться XML-файлами. Но он будет ограничен IE. – Don
FWIW, у меня такая же проблема в Chrome, что в основном то же самое. – apollodude217