Считайте URL file:// в IE XMLHttpRequest

Я разрабатываю приложение JavaScript, это предназначено, чтобы быть выполненным любой от веб-сервера (по http) или от файловой системы (на URL file://).

Как часть этого кода, я должен использовать XMLHttpRequest для загрузки файлов в том же каталоге как страница и в подкаталогах страницы.

Этот код хорошо работает ("ПЕРЕДАЮТ") при отсутствии выполнении на веб-сервере, но работе ("ПЕРЕСТАЛИ РАБОТАТЬ") в Internet Explorer 8 при убегании файловая система:



FAIL

Конечно, сначала это перестало работать, потому что никакие сценарии не могут работать вообще в файловой системе; пользователю предлагают желтая панель, предупредив, что, "Чтобы помочь защитить Вашу безопасность, Internet Explorer ограничил эту веб-страницу в запущении скриптов или элементов управления ActiveX, которые могли получить доступ к Вашему компьютеру".

Но даже после того как я нажимаю на панель, и "Позволяют Заблокированное Содержание" страница, все еще перестал работать; я добираюсь, "Доступ Запрещен" ошибки на вызове xhr.open.

Это озадачивает меня, потому что MSDN заявляет, что "В целях разработки, протокол file:// позволяется от Локальной зоны Машины". Этот локальный файл должен быть частью Локальной Зоны Машины, правильно?

Как я могу заставить код как это работать? Все хорошо с запросом пользователя с предупреждениями системы безопасности; я не соглашаюсь с тем, чтобы вынуждать их выключить безопасность в панели управления.

Править: Я, на самом деле, не загружаю XML-документ в своем случае; я загружаю файл простого текста (.txt).

12
задан hippietrail 8 August 2012 в 07:10
поделиться

2 ответа

Хмм, может ли быть разница между родным объектом XMLHttpRequest и объектом ActiveX? Кажется, я что-то об этом помню. То есть, вместо

var xhr = new XMLHttpRequest();

попробуйте

var xhr = new ActiveXObject("MSXML2.XMLHTTP");

Очевидно, установите несколько проверок, чтобы проверить, поддерживает ли браузер ActiveX. Конечно, это ограничивается только IE.

8
ответ дан 2 December 2019 в 06:26
поделиться

Я случайно наткнулся на ту же проблему. Как было сказано выше, работает неродной «конструктор» ActiveX. Я не совсем уверен, применяются ли разные политики к этим двум объектам, но поскольку jQuery упоминает ту же проблему, это может быть настоящей ошибкой. Вот соответствующий фрагмент кода из источника jQuery (1.4.2, строка 4948):

// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7 (can't request local files),
// so we use the ActiveXObject when it is available
// This function can be overriden by calling jQuery.ajaxSetup
xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
    function() {
        return new window.XMLHttpRequest();
    } :
    function() {
        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {}
    }
7
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: