On 7 30 , 5 28 , steven <[EMAIL PROTECTED]> wrote:
> use GtkMozEmbed widget to construct gtk-based browser .
> the situation is that the browser should notify end user when popup
> windows blocked event occurred
> and let end user to choose whether allow the popup windows shows
> the framework is that
> 1) register a DOMPopupBlocked event listner of the target of doc
> 2) get blocked window uri
> 3) tell UI and nsIPermissionManager ,let end user to choose whether
> allow the site popoup windows
>
> I add a listener to DOMPopupBlocked event of the document when the
> page load completely.
> #include<nsIDOMEventListener.h>
> #include <nsIDOMPopupBlockedEvent.h>
> #include<nsCOMPtr.h>
> #include<nsIURI.h>
> #include<nsIDOMEvent.h>
> #include "popupwindowlister.h"
> #include <nsString.h>
> #include <gtkembedmoz/gtkmozembed.h>
> #include <nsIWebBrowser.h>
> #include <gtkembedmoz/gtkmozembed_internal.h>
> #include <nsIDOMWindow.h>
> #include <nsIDOMWindow2.h>
>
> NS_IMPL_ADDREF(popupwindowlister);
> NS_IMPL_RELEASE(popupwindowlister);
>
> NS_INTERFACE_MAP_BEGIN(popupwindowlister)
> NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
> NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMEventListener)
> NS_INTERFACE_MAP_END
>
> NS_IMETHODIMP popupwindowlister::HandleEvent( nsIDOMEvent* aDOMEvent)
> {
> fprintf(stderr,"HandleEvent invoke\n");
>
> nsCOMPtr<nsIDOMPopupBlockedEvent> popupEvent =
> do_QueryInterface(aDOMEvent);
> NS_ENSURE_TRUE (popupEvent, NS_ERROR_FAILURE);
>
> nsCOMPtr<nsIURI> requesterURI;
> popupEvent->GetRequestingWindowURI(getter_AddRefs(requesterURI));
> NS_ENSURE_TRUE (requesterURI, NS_ERROR_FAILURE);
>
> nsCAutoString spec;
> nsresult rv = requesterURI->GetSpec(spec);
> NS_ENSURE_SUCCESS (rv, rv);
> NS_ENSURE_FALSE (spec.IsEmpty(), NS_ERROR_FAILURE);
>
> fprintf (stderr, " popup %s\n",spec.get());
> return rv;
>
> }
>
> popupwindowlister::popupwindowlister(GtkMozEmbed* embed)
> {
>
> gtk_moz_embed_get_nsIWebBrowser(embed ,getter_AddRefs(mWebBrowser));
>
> }
>
> popupwindowlister::~popupwindowlister()
> {
>
> }
>
> nsresult popupwindowlister::GetDOMEventTarget (GtkMozEmbed * embed ,
> nsIDOMEventTarget** aTarget)
> {
> nsCOMPtr<nsIWebBrowser> aWebBrowser ;
> gtk_moz_embed_get_nsIWebBrowser(embed ,getter_AddRefs(aWebBrowser));
>
> nsCOMPtr<nsIDOMWindow> domWin;
> aWebBrowser->GetContentDOMWindow (getter_AddRefs(domWin));
> NS_ENSURE_TRUE (domWin, NS_ERROR_FAILURE);
>
> nsCOMPtr<nsIDOMWindow2> domWin2 (do_QueryInterface (domWin));
> NS_ENSURE_TRUE (domWin2, NS_ERROR_FAILURE);
>
> return domWin2->GetWindowRoot (aTarget);
>
> }
>
> I connect callback func below to "net_stop" singal :
>
> nsCOMPtr<nsIDOMEventTarget> target;
>
> popupwindowlister::GetDOMEventTarget((GtkMozEmbed*)embed,getter_AddRefs(tarĀget));
> popupwindowlister * mPopupEventListener = new
> popupwindowlister(GTK_MOZ_EMBED(embed));
> target->AddEventListener(NS_LITERAL_STRING("DOMPopupBlocked"),
> mPopupEventListener,
> PR_TRUE);
> But when I run it
> vistorhttp://popuptest.com/popuptest1.com
>
> function popupwindowlister::HandleEvent seems not be called ,because
> the string HandleEvent invoke not show in the screen
>
> thanks for any guide
I have just resolve it . AddEventLister on DOMPopupBlocked in
GtkMozEmbed, make a new signal ,
Once catching the event, emit the signal on GtkMozEmbed in HandleEvent
function ,That is all
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding