IE6: скачать HTML, не выполняя содержащийся javascript, в кодировке ISO-8859-1 - PullRequest
1 голос
/ 19 октября 2010

Вот код (использующий jquery), который я использую для загрузки html-файла, из которого я извлекаю таблицу и ее содержимое.

var url = $('#url').val(); // url to access

if ($.browser.msie && $.browser.version.substr(0,1)<7) {
 var frame = $('<iframe/>').css('display', 'none').attr('src', url );
 frame.appendTo('body')
        .load(function() {
            var data = frame.contents()[0].firstChild.innerHTML;
            frame.remove; // kill the frame
            extractReport(data); // extract the data table
        }); // load
}
else {
    $.ajaxSetup({
        'beforeSend' : function(xhr) {
            xhr.overrideMimeType('text/html; charset=ISO-8859-1');
            }
        }); // ajaxSetup
     $.ajax(
        {
        async:false,
        url:url, 
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus );
        }, 
        success:
                function(data, textStatus, XMLHttpRequest) {
                    extractReport(data); 
                    }
        }); // ajax
} //else

Моя проблема в том, что когда я использую объект active-X xmlhttprequest в IE6, responseText содержит мусор для французских символов. Мне удалось обойти это с помощью iframe (т.е. 6 не поддерживают overrideMimeType, который я использую для Firefox). Но теперь javascript, содержащийся во фрейме html, выполняется. Есть ли в IE6 способ загрузить мой html-файл в правильной кодировке без выполнения javascript?

Примечание. У меня нет прав на изменение конфигурации Apache для принудительной установки кодировки ISO-8859-1.

Моя идея: может ли html быть загружен как обычный текст с ActiveX? Единственный, кого я знаю, это ActiveXObject («Msxml2.XMLHTTP.6.0»), и он терпит неудачу.

1 Ответ

2 голосов
/ 19 октября 2010

Может ли HTML быть загружен в виде простого текста с ActiveX?Я знаю только ActiveXObject («Msxml2.XMLHTTP.6.0»), и он не работает.

Нет.Действительно, IE не поддерживает метод XMLHttpRequest уровня 2 * overrideMimeType ни в одной версии на сегодняшний день, независимо от того, используется ли реализация native-JScript (IE7 +) или старой школы ActiveX.

overrideMimeType действительноединственный способ получить XMLHttpRequest для получения текстового содержимого в другом наборе символов, отличном от того, который помечен как (UTF-8, если не указан набор символов заголовка Content-Type. Набор символов <meta> не используется, потому что только анализатор HTMLпрочитал бы это, и XMLHttpRequest не является анализатором HTML).Невозможно получить необработанный двоичный файл, используя XMLHttpRequest.

[метод iframe] без выполнения содержащегося в нем javascript

Ну, вроде.Есть специфичный для IE6 + и обычно довольно сомнительный атрибут security , который изменяет зону дочернего документа.Это обычно имеет эффект выключения JavaScript, помимо других побочных эффектов, но именно то, что происходит, зависит от настроек зоны ограниченных сайтов IE пользователя, поэтому это не очень надежно.

var frame = $('<iframe security="restricted"/>').css('display', 'none').attr('src', url);

(и да, вам нужно поместить его в разметку, а не устанавливать его с помощью свойства DOM с помощью attr или ярлыков создания атрибута jQuery 1.4, которые обычно предпочтительнее.)

Я бы использовал этотолько в крайнем случае.Я думаю, это вызовет кучу проблем.

У меня нет прав на изменение конфигурации Apache для принудительной установки кодировки ISO-8859-1.

Ну, это отстой.Вы уполномочены изменить целевую страницу, чтобы она была UTF-8?Наборы символов, отличные от UTF-8, соответствуют прошлому веку!

if ($ .browser.msie && $ .browser.version.substr (0,1) <7) </p>

Не используйте перехват браузера.Возможность, которую вы хотите отнюхать, - overrideMimeType, поэтому проверьте это:

if ('XMLHttpRequest' in window && 'overrideMimeType' in new XMLHttpRequest()) {
    // xmlhttp branch
} else if {
    // nasty iframe branch
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...