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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№103-07-2008 04:23:51

netz
Участник
 
Группа: Members
Зарегистрирован: 03-07-2008
Сообщений: 4
UA: Opera 9.5

Отловить событие при попытке редиректа на XPCom

Приветсвую!

Пишу плугин на XPCom (С++), задача следующая:
Есть html-страничка примерно такая:

<form action="http://site.ru/" method="post">
    <input type="text" name="value" value=""/>
    <input type="submit" value="Submit" />
</form>

Нужно отловить момент когда происходит заполнение post-запроса и попытка его отправки на сервер.
Мне нужно прочитать передаваемые значения и в зависимости от их содержимого либо разрешить отправку, либо остановить редирект не обновляя страницу.

Посоветуйте в каком интерфейсе это можно сделать?
Смотрел исходники firefox и нашел что что-то похоже происходит в nsHttpChannel.cpp в функции

Выделить код

Код:

sHttpChannel::ProcessRedirection(PRUint32 redirectType){
.............................
// здесь какая-то подготовка к загрузке новой страницы
.............................
 // call out to the event sink to notify it of this redirection.
    if (mHttpEventSink) {
        rv = mHttpEventSink->OnRedirect(this, newChannel);
        if (NS_FAILED(rv)) return rv;
    }
....................................
// если дошли до сюда, то грузим редирект-страницу
....................................
}

Вопрос в следующем: можно ли сделать то что мне нужно подписавшись на nsIHttpEventSink:onRedirect (см. nsIHttpEventSink.idl)? Может быть есть способы попроще?
И если все нужно делать через интерфейс nsIHttpEventSink, то как на него подписаться, через RegisterFactory или как-то по другому?

Отсутствует

 

№203-07-2008 15:30:41

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

Re: Отловить событие при попытке редиректа на XPCom

Можно подписать observer на http-on-examine-response и у него в subject будет объект с интерфейсом nsIHttpChannel.

Что касается nsIHttpEventSink - вот здесь: http://www.xulplanet.com/references/xpcomref/ifaces/nsIHttpEventSink.html написано, что надо реализовывать объект с этим интерфейсом. А потом он назначается в channel.notificationsCallback или аргументом в asyncOpen (в js).


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№305-07-2008 01:24:13

netz
Участник
 
Группа: Members
Зарегистрирован: 03-07-2008
Сообщений: 4
UA: Opera 9.5

Re: Отловить событие при попытке редиректа на XPCom

Спасибо за комментарий, решил делать по другому, на форме создал кнопку и прописал в событии onClick вызов своей функции, которую разместил в js.
Более подробно в этой теме: http://forum.mozilla-russia.org/viewtopic.php?id=24677

Отсутствует

 

Board footer

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