Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№110-06-2012 14:16:30

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Nightly 16.0

Странное поведение XMLHttpRequest в отношении к rutracker.org

Пытаюсь реализовать в своём расширении для rutracker.org новые возможности XHR.

Не могу понять, почему данный код в девяти случаях из десяти уходит в таймаут.

Выделить код

Код:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://rutracker.org/forum/index.php", true);
xhr.mozBackgroundRequest = true;
xhr.timeout = 10000;
xhr.responseType = "document";
xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
xhr.overrideMimeType('text/html; charset=windows-1251');
xhr.onload = function() {
    alert(this.responseXML.title);
}
xhr.onerror = function() {
    alert("Error!");
}
xhr.ontimeout = function() {
    alert("Timeout!");
}
xhr.send(null);

Причём относительно других сайтов всё работает правильно (отслеживаю таким образом обновления на нескольких форумах). В те редкие случаи, когда таймаута не происходит, http заголовки как запроса, так и ответа идентичны проблемным случаям, причём во всех случаях ответ HTTP/1.1 200 OK приходит через сотню-другую миллисекунд (смотрю в расширениях, отслеживающих http активность).

Загвоздка оказывается в условии xhr.responseType = "document", потому что данный код в таймаут не уходит:

Выделить код

Код:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://rutracker.org/forum/index.php", true);
xhr.mozBackgroundRequest = true;
xhr.timeout = 10000;
xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
xhr.overrideMimeType('text/html; charset=windows-1251');
xhr.onload = function() {
    alert(this.responseText.match(/<title>.+?<\/title>/i)[0]);
}
xhr.onerror = function() {
    alert("Error!");
}
xhr.ontimeout = function() {
    alert("Timeout!");
}
xhr.send(null);

Откуда берётся зависание? Ведь при парсинге html в DOM-дерево XHR не загружает никаких файлов (css, js, изображения) и не отрабатывает скрипты, в отличие от полноценного рендеринга страниц.

Если кто-то сможет найти время и проверить код на своих браузерах (должен работать, начиная с Firefox 12; проверять можно в штатном редакторе JavaScript в окружении браузера или при помощи CustomButtons, например), буду благодарен так же, как и за любые догадки о причинах и решении. Сам тестирую на последней ночной сборке под WinXP.

Отредактировано homo_nudus (11-06-2012 17:17:19)

Отсутствует

 

№217-06-2012 03:17:36

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Nightly 16.0

Re: Странное поведение XMLHttpRequest в отношении к rutracker.org

Новые данные: http://habrahabr.ru/post/145953/

Отредактировано homo_nudus (17-06-2012 03:18:02)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]