>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Как перехватить загрузку фрейма? http://forum.mozilla-russia.org/viewtopic.php?id=59114 |
krizis > 15-05-2013 12:08:38 |
Поддерживаю плагин ff на c++, сам никогда их разработкой не занимался. В плагине требуется перехватить загрузку фрейма, получить доступ к его url, и , если надо(если mailto), предотвратить загрузку. Сейчас там инициируется и отслеживается загрузка страниц, используются nsIObserver и nsIWebProgressListener. Если их и можно, использовать для перехвата и управления загрузкой фреймов, то я не понял как. Подскажите, пожалуйста. |
hydrolizer > 15-05-2013 15:27:38 |
krizis > 16-05-2013 22:56:07 |
Спасибо, вроде бы действительно то. WebProgressListeners вариант не работает. Наверное "The Easy Way: Load Events" Только непонятно, какой интерфейс должен поддерживать load event, мне ж на с++ писать |
hydrolizer > 18-05-2013 20:07:46 |
krizis Выделить код Код:for (var i in Components.interfaces) { var i2 = null; try { i2 = event.QueryInterface(Components.interfaces[i]); } catch(err) {} if (i2) Services.console.logStringMessage(i); } и получается, что, кроме nsISupports, это nsIDomEvent и nsIClassInfo. |
krizis > 18-05-2013 20:59:38 |
Выделить код Код:NS_IMETHODIMP FFExtension::OnStateChange( nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus ) { #pragma warning(push) #pragma warning(disable : 4127) NS_ENSURE_ARG_POINTER(aWebProgress); #pragma warning(pop) log4cplus::Logger logger = log4cplus::Logger::getInstance( LOG4CPLUS_TEXT("OnStateChange")); nsresult rv = NS_ERROR_FAILURE; nsCOMPtr<nsIDOMWindow> domwin; nsCOMPtr<nsIDOMDocument> domDoc; aWebProgress->GetDOMWindow(getter_AddRefs(domwin)); domwin->GetDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDOMWindow> domTopWin; domwin->GetTop(getter_AddRefs(domTopWin)); if (domwin.get() != domTopWin.get()) { // this is a frame. LOG4CPLUS_DEBUG(logger, "this is a frame "); if(aRequest) { nsCAutoString url; aRequest->GetName(url); LOG4CPLUS_DEBUG(logger, "frame url '" << static_cast<const char*>(_bstr_t(url.get())) << "'"); nsCOMPtr<nsIDOMHTMLDocument> htmlDocument =\ do_QueryInterface(domDoc); // Get current page URI nsString uriString; rv = htmlDocument->GetURL(uriString); NS_ENSURE_SUCCESS(rv, rv); LOG4CPLUS_DEBUG(logger, "uriString " << NS_LossyConvertUTF16toASCII(uriString).get()); } } как бы работает, но выводит 5-17-13 18:20:38,656 [1192] DEBUG OnStateChange <> - this is a frame это при открытии страницы <html> "mailto:a@d.d" 18-05-2013 21:01:36 hydrolizer пишет
по поводу
а можно в терминах интерфейсов? это какой интерфейс плагин должен реализовать? |