Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№123-08-2006 01:28:24

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Сделать что-то при загрузке содержимого страницы.

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

Вот к примеру:
Человек грузит страницу. Страница загрузилась. Если адрес страницы http://testsite.ru/ то чтоб вывело мессагу "вы на нашем сайте", и если к примеру пользователь открыл сайт в новой закладке, и она там загрузилась, то при переходе на ту закладку, чтоб если тоже адрес был http://testsite.ru/ вывело месагу это. (Текст мессаги и адрес - в тестовых целях)

Заранее спасибо.

Отсутствует

 

№223-08-2006 19:32:30

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

Re: Сделать что-то при загрузке содержимого страницы.

Выделить код

Код:

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

по поводу переключения вкладок - нужно на событие подписаться, на какое я не знаю :)

Отсутствует

 

№323-08-2006 21:36:39

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Сделать что-то при загрузке содержимого страницы.

Ого... стока всего из-за такой мелочи? Но спасибо.
А можешь вкратце объяснить что это такое и что оно именно делает (не люблю тупо копировать код) - Буду очень благодарен

по поводу переключения вкладок - нужно на событие подписаться

ну я знаю есть событие select
т.е. если к примеру:

Выделить код

Код:

function pageSwitched(){
alert('You have changed tab');
}
getBrowser().addEventListener("select", pageSwitched, false);

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

Отредактировано Masletso (23-08-2006 21:41:17)

Отсутствует

 

№424-08-2006 12:51:57

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Сделать что-то при загрузке содержимого страницы.

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

Отсутствует

 

№524-08-2006 15:00:43

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Сделать что-то при загрузке содержимого страницы.

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ентов на части порвет !!!

Отсутствует

 

№624-08-2006 15:52:37

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Сделать что-то при загрузке содержимого страницы.

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

Отсутствует

 

№724-08-2006 16:44:02

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Сделать что-то при загрузке содержимого страницы.

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

Отсутствует

 

№830-08-2006 14:05:44

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

Re: Сделать что-то при загрузке содержимого страницы.

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

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

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

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

Выделить код

Код:

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

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

Выделить код

Код:

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

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

Отсутствует

 

№930-08-2006 14:46:52

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Сделать что-то при загрузке содержимого страницы.

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]