Страницы: 1
Пытаюсь реализовать в своём расширении для 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)
Отсутствует
Новые данные: http://habrahabr.ru/post/145953/
Отредактировано homo_nudus (17-06-2012 03:18:02)
Отсутствует
Страницы: 1