Приветсвую:
Что мне нужно:
Программа висит в оверлее в статус баре. Когда пользователь заводит адрес и страница полностью загрузилась (и ещё желательно добавить при переключении между закладками)  - проверить адрес загруженной страницы и соответсвенно что-нибудь сделать.

Вот к примеру:
Человек грузит страницу. Страница загрузилась. Если адрес страницы 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);

а как добавить туда этот свитч?

а пример не работает =((
почему никто не знает как это сделать? =)

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);

так как будто правильней

спасибо, попробую позже =)
если получится с меня болшой плусЪ

Работает, вто только проблема с тэбами.
Если я нахожусь на сайте.. И жму на ссылку, чтоб она открылась в новой вкладке, то оно открывается и сообщение не выводится.
А если я вернусь в тот тэб, и вернусь ещё, то функция уже сработает... Как это исправить?

так как будто правильней

странно, а у меня getBrowser().addProgressListener и без второго аргумента нормально привязывался

когда подписываешься на события через getBrowser(), то события приходят:
1)когда изменился  STATE в текущей вкладке
2)когла переходишь на другую вкладку,
т.е. getBrowser() возвращает объект типа браузер для текущей вкладки, при изменении текущей вкладки, он видимо тоже считает нужным нас об этом проинформировать.

чтобы реагировать на события какой-либо конкретной вкладки надо, наверное, делать так:

Выделить код

Код:

getBrowser().getBrowserForTab(SomeTab).addProgressListener(ProgressListener, STATE_START);

тока проблема в том как найти эту вкладку. я когда подписывался на события вкладки сам их открывал:

Выделить код

Код:

SomeTab = getBrowser().addTab("http://...");

тебе же наверное придётся подписываться на событие открытия новой вкладки

сорри, но первый вариант потом заработал (ну тот который я сказал что глюк с тебами) =)