Страницы: 1
var appcontent = document.getElementById("appcontent"); if(!appcontent) return; appcontent.addEventListener("load", my_load_listener, true); appcontent.addEventListener("beforeunload", my_unload_listener, true);
Отсутствует
Выделить кодКод:
var appcontent = document.getElementById("appcontent"); if(!appcontent) return; appcontent.addEventListener("load", my_load_listener, true); appcontent.addEventListener("beforeunload", my_unload_listener, true);
А скажите, почему true?
Причина, по которой событие onload срабатывает по несколько раз?
Спасибо
Отсутствует
А скажите, почему true?
в данном примере это не принципиально
Причина, по которой событие onload срабатывает по несколько раз?
событие ловит загрузку всех документов, включая frame/iframe из всех табов. фильтровать всё это очень просто
Отсутствует
Shutnik
в данном примере это не принципиально
Помнится, как раз-таки принципиально – load-события от tabbrowser'а ловятся только в capture phase (т.е. с true).
Хотя смотрел давно – могу и заблуждаться.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Shutnik
в данном примере это не принципиально
Помнится, как раз-таки принципиально – load-события от tabbrowser'а ловятся только в capture phase (т.е. с true).
Хотя смотрел давно – могу и заблуждаться.
Несложный опыт показал, что по false крокодил всё-таки не ловится ) p.s. видимо, из-за progress listener'а, хотя, чёрт его знает
Отредактировано Anton (13-11-2008 22:08:59)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
А как можно отлавливать изменение текущего сайта, который видит пользователь сейчас?
Такие события как:
1) Пользоаатель набрал и перешел на новый сайт
2) Пользователь перешел на новый сайт по ссылке
3) Пользователь переключился на новый таб.
Одним словом: Реагировать на изменение window.content.location
Отсутствует
А как можно отлавливать изменение текущего сайта, который видит пользователь сейчас?
если сильно упрощённо, то так:
function my_load_listener (event) { var doc = event.originalTarget; var win = getBrowser().selectedBrowser.contentDocument; if(doc == win) { // активный таб } }
1) Пользоаатель набрал и перешел на новый сайт
2) Пользователь перешел на новый сайт по ссылке
выше оно и было, остальное фильтруется обработчиком. можно ещё попробовать повесить watch на window.location.href
3) Пользователь переключился на новый таб.
var appcontent = document.getElementById("appcontent"); if(!appcontent) return; appcontent.addEventListener("select", my_select_listener, true);
Отсутствует
var tabCont = gBrowser.mTabContainer; tabCont.addEventListener("TabSelect", selectHandler, true);
Еще можно поиграться для получения совместимости с расширением Split Browser:
function getTabBrowser(tabsRequired) { return "SplitBrowser" in window && !(tabsRequired && "TM_init" in window) // Tab Mix Plus ? SplitBrowser.activeBrowser : gBrowser || getBrowser(); }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Спасибо.
Я только поменял "appcontent" на "content" (tabbrowser)
function NewSite (event) { ... } document.getElementById("content").addEventListener("select", NewSite, true); document.getElementById("content").addEventListener("load", NewSite, true);
Отсутствует
Спасибо вам всем. Очень полезная оказалась информация. В частности, получилось подключиться к событиям таббраузера с помощью C++ в xpcom-компоненте.
Хочется отлавливать еще и другие события - появление новой вкладки за одно сообщение, а то load приходит несколько раз на одну вкладку Кто-нибудь знает, где посмотреть какие события могут быть у элемента? Стандартный список на xulplanet выглядит неполным.
И еще вопрос: какие интерфейсы реализует tabBrowser? Хочется создавать новую вкладку и загружать в ней новый html по uri прямо из C++ компонента. Как это можно сделать?
Спасибо.
Я только поменял "appcontent" на "content" (tabbrowser)Выделить кодКод:
function NewSite (event) { ... } document.getElementById("content").addEventListener("select", NewSite, true); document.getElementById("content").addEventListener("load", NewSite, true);
Отсутствует
а то load приходит несколько раз на одну вкладку
не должно такого быть, там наверное фреймы есть. их надо фильтровать
нашёл интересную статью по теме на mdc
Отсутствует
Спасибо за ссылку, помогло.
StepanM пишета то load приходит несколько раз на одну вкладку
не должно такого быть, там наверное фреймы есть. их надо фильтровать
Ошибка была в том, что я коннектился к "content" элементу - это tabbrowser, а нужно было, как ты правильно говорил в самом начале, к "appcontent". Теперь можно отслеживать, какому документу соответствуют события DOMContentLoaded и unload: соответствующий eventTarget кастится к nsIDOMHTMLDocument. Замечено, что на каждый документ приходит всегда ровно один DOMContentLoaded и unload. Для каждого дополнительного фрейма будет дополнительно еще одно событие DOMContentLoaded (unload).
Осталось научиться загружать страничку в новой вкладке из C++. Может, есть у кого-нибудь наработки? Не могу найти даже способ получить window.getBrowser() из C++.
Отсутствует
Страницы: 1