Я разрабатываю приложение JavaScript, которое должно запускаться либо с веб-сервера (через http), либо из файловой системы (в файле: // URL).
Как часть этого кода, мне нужно использовать 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 говорит, что «В целях разработки протокол file: // разрешен из зоны локального компьютера». Этот локальный файл должен быть частью зоны локального компьютера, верно?
Как мне заставить этот код работать? Я в порядке, предлагая пользователю предупреждения безопасности; Я не в порядке, заставляя их отключать безопасность на панели управления.
РЕДАКТИРОВАТЬ: На самом деле я не загружаю документ XML в моем случае; Я загружаю простой текстовый файл (.txt).