Re: get current content document inside Firefox cpp code
Boris Zbarsky <[email protected]>
| Newsgroups | gmane.comp.mozilla.devel.dom |
|---|---|
| Message-ID | <[email protected]> |
On 11/9/09 8:52 PM, DONG Xinshu wrote:
> When 'http-on-modify-request' notifies the observer, get current
> top-level URI by
> content.document.location.href.
This URI might have nothing to do with the channel the
http-on-modify-request is for, of course....
> I tried in nsHttpChannel::Init with
Like I said, you can't get a document in nsHttpChannel
> rvx =
> servMan->GetServiceByContractID("@mozilla.org/embedding/browser/nsWebBrowser;1",
Uh... whatever gave you the idea that nsWebBrowser is a service? It's not.
> nsCOMPtr<nsIDOMWindow> domWin;
> rvx = webBrowser->GetContentDOMWindow(getter_AddRefs(domWin));
>
> But webBrowser->GetContentDOMWindow(getter_AddRefs(domWin)) always
> returned failure result.
Sure. nsWebBrowser is what you can use to instantiate a web browser.
If you then set it up correctly (which you didn't) and then browse
somewhere in it (which you also didn't), then GetContentDOMWindow will
hand back the window of the content loaded in that web browser. This is
used, e.g in Camino (one nsWebBrowser per tab).
> nsCOMPtr<nsIWindowMediator> winMd;
> rvx =
> servMan->GetServiceByContractID("@mozilla.org/appshell/window-mediator;1",
> NS_GET_IID(nsIWindowMediator),
> getter_AddRefs(winMd));
> nsCOMPtr<nsIDOMWindowInternal> domWinInt;
> rvx = winMd->GetMostRecentWindow(0, getter_AddRefs(domWinInt));
I'm surprised this compiled....
> For static web pages, 'curHref' could give the correct URI, but for AJAX
> applications, 'curHref' was not correct (different from what I got from
> content.document.location.href from 'http-on-modify-request' observer in
> extension
In the case when you have multiple windows they don't have to match by
any means.
> So I guess GetMostRecentWindow is not entirely the same
> thing as currently selected tab.
It's a window, not a tab...
> Could you please advise the correct way to do it in Firefox code?
You can't do what you want to do. Not only that, but whatever you're
trying to do doesn't make sense to me so far. So what are you
_actually_ trying to do. Not on the "I want a document" level, but on
the "explain it to your grandmother" level.
-Boris