>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Странное поведение XMLHttpRequest в отношении к rutracker.org http://forum.mozilla-russia.org/viewtopic.php?id=55234 |
homo_nudus > 10-06-2012 14:16:30 |
Пытаюсь реализовать в своём расширении для 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 > 17-06-2012 03:17:36 |
Новые данные: http://habrahabr.ru/post/145953/ |