>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Как отследить останов загрузки страницы? http://forum.mozilla-russia.org/viewtopic.php?id=24808 |
zencd > 09-07-2008 21:49:19 |
Вот грузится страница в Firefox 3, и в одно мгновение перестаёт — такое событие мне и нужно отловить (в каждом табе). Остановка может случиться по разным причинам: явная остановка юзером, успешное окончание загрузки, ошибка там сетевая, whatever. Вот это почти работает: Но! только активного таба. Для background'ных сообщение STATE_STOP не ловится :-( |
Shutnik > 10-07-2008 01:24:08 |
можно примерно так: Выделить код Код:var appcontent = document.getElementById("appcontent"); appcontent.addEventListener("load", function(){alert(0);}, true); appcontent.addEventListener("error", function(){alert(1);}, true); |
zencd > 10-07-2008 02:44:03 |
Спасибо! Оказалось что «load» listener получает два/три сообщения на каждый рефреш страницы: 1е событие выстреливает сразу как начинается загрузка А раньше я eventTarget фильтровал по классу HTMLDocument, вот и не получал эти интересные данные. Хорошо бы ещё без особых хаков отличать последний tab-icon-image от остальных… |
zencd > 10-07-2008 03:50:35 |
UPD: в случае event.originalTarget.className == "tab-icon-image", А мне нужно получить именно HTML doc из этого события (если следовать этим путём, tab-icon-image, а других я не вижу). |
Shutnik > 10-07-2008 10:40:47 |
там видимо грузится помимо основного документа ещё какие-нибудь, допустим, в iframe. Выделить код Код:load_listener : function (event) { var doc = event.originalTarget; var href = doc.location; if(!href) return; href = href.href; if(!href || ["http://", "https://"].indexOf(doc.location.protocol) == -1) return; var win = doc.defaultView; if(win.parent != win) return; // alert(win.contentDocument.title); }, |
zencd > 10-07-2008 15:14:29 |
К сож. если фильтровать событие «load» по http-документу, мы не получим это событие когда юзер нажмёт «Stop» и остановит загрузку. А если пропускать события с (event.originalTarget.className == "tab-icon-image"), событие это ловится, но зато непонятно что с ним делать. Разве что искать активный таб активного окна… но это чревато ошибками. Кстати фреймов у меня нет, очень простой документ, на котором проверяю. Это какие-то xul'овские внутренности грузятся. |
zencd > 10-07-2008 16:00:26 |
В принципе вопрос можно считать решённым: Выделить код Код:function on_load(event) { if("tab-icon-image" == event.originalTarget.className) { var doc = gBrowser.selectedBrowser.contentDocument alert(doc.location) } } Другое дело что вызывается этот обработчик два-три раза на каждую страницу :-)). Но в моём конкретном случае немного лишней работы приемлимо. |