Страницы: 1
Приветсвую:
Что мне нужно:
Программа висит в оверлее в статус баре. Когда пользователь заводит адрес и страница полностью загрузилась (и ещё желательно добавить при переключении между закладками) - проверить адрес загруженной страницы и соответсвенно что-нибудь сделать.
Вот к примеру:
Человек грузит страницу. Страница загрузилась. Если адрес страницы http://testsite.ru/ то чтоб вывело мессагу "вы на нашем сайте", и если к примеру пользователь открыл сайт в новой закладке, и она там загрузилась, то при переходе на ту закладку, чтоб если тоже адрес был http://testsite.ru/ вывело месагу это. (Текст мессаги и адрес - в тестовых целях)
Заранее спасибо.
Отсутствует
const STATE_STOP = Components. interfaces. nsIWebProgressListener.STATE_STOP; const STATE_NETWORK = Components.interfaces.nsIWebProgressListener.STATE_IS_NETWORK; var progressListener= { QueryInterface: function (aIID) { if (aIID. equals (Components. interfaces. nsIWebProgressListener) || aIID. equals (Components. interfaces. nsISupportsWeakReference) || aIID. equals (Components. interfaces. nsIXULBrowserWindow) || aIID. equals (Components. interfaces. nsISupports)) return this; throw Components. results. NS_NOINTERFACE; }, onLocationChange:function (webProgress, request, location){}, onProgressChange:function(webProgress, request, curSelfProgress, maxSelfProgress, curTotalProgress, maxTotalProgress){}, onSecurityChange:function(webProgress, request, state){}, onStateChange:function(webProgress, request, stateFlags, status){ var STOP = (stateFlags & STATE_STOP) != 0; var NETWORK = (stateFlags & STATE_NETWORK) != 0; if (NETWORK && STOP) { //страница догрузилась (либо польз-ль нажал на стоп) //можно проверять url и выдавать сообщение } }, onStatusChange:function(webProgress, request, status, message){} }; getBrowser().addProgressListener(progressListener);
по поводу переключения вкладок - нужно на событие подписаться, на какое я не знаю
Отсутствует
Ого... стока всего из-за такой мелочи? Но спасибо.
А можешь вкратце объяснить что это такое и что оно именно делает (не люблю тупо копировать код) - Буду очень благодарен
по поводу переключения вкладок - нужно на событие подписаться
ну я знаю есть событие select
т.е. если к примеру:
function pageSwitched(){ alert('You have changed tab'); } getBrowser().addEventListener("select", pageSwitched, false);
а как добавить туда этот свитч?
Отредактировано Masletso (23-08-2006 21:41:17)
Отсутствует
1.
window. addEventListener ("load", onloadTrap, true); function onloadTrap (event) { if ((event. originalTarget. nodeName == "#document") && (event. originalTarget. location. href == "http://testsite.ru/")) { alert ("ВЫ НА НАШЕМ САЙТЕ !!!"); } }
2.
if (!window. tabSelectTrapUsed) { var cont = document. getElementById ("content"); window. tabSelectTrap = function (event) { var nn = event. originalTarget. nodeName; var an = event. attrName; var nv = event. newValue; if ((nn == "xul:tab") || (nn == "tab")) { if ((an == "selected") && (nv == "true")) { var cont = document. getElementById ("content"); var lb = event. originalTarget. linkedBrowser; if (lb. currentURI. spec == "http://testsite.ru/") { alert ("ВЫ НА НАШЕМ САЙТЕ !!!"); } } } } cont. addEventListener ("DOMAttrModified", window. tabSelectTrap, true); window. tabSelectTrapUsed = true; }
как-то так в первом приближении.
а пример не работает
const STATE_START = Components. interfaces. nsIWebProgressListener.STATE_START; ... getBrowser().addProgressListener(progressListener,STATE_START);
так как будто правильней
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Работает, вто только проблема с тэбами.
Если я нахожусь на сайте.. И жму на ссылку, чтоб она открылась в новой вкладке, то оно открывается и сообщение не выводится.
А если я вернусь в тот тэб, и вернусь ещё, то функция уже сработает... Как это исправить?
Отсутствует
так как будто правильней
странно, а у меня getBrowser().addProgressListener и без второго аргумента нормально привязывался
когда подписываешься на события через getBrowser(), то события приходят:
1)когда изменился STATE в текущей вкладке
2)когла переходишь на другую вкладку,
т.е. getBrowser() возвращает объект типа браузер для текущей вкладки, при изменении текущей вкладки, он видимо тоже считает нужным нас об этом проинформировать.
чтобы реагировать на события какой-либо конкретной вкладки надо, наверное, делать так:
getBrowser().getBrowserForTab(SomeTab).addProgressListener(ProgressListener, STATE_START);
тока проблема в том как найти эту вкладку. я когда подписывался на события вкладки сам их открывал:
тебе же наверное придётся подписываться на событие открытия новой вкладки
Отсутствует
Страницы: 1