We've recently implemented a minimal embedding application using the
new (and wonderful!) embedding API (specifically, via GTK and X11).
In particular, we implement a MozViewListener and we've verified that
the DocumentLoaded callback is getting called at what appears to be
the right time.
However, the following implementation of DocumentLoaded always prints
"Number of elements is 0". This is still a great step forward from
the old API--in which several of these functions would barf on us and
return errors--but it's somewhat vexing nonetheless.
void WebListener::DocumentLoaded()
{
// myView is the MozView we're using to drive the embedding app
nsIDOMWindow2* dom_window=myView->GetDOMWindow();
nsresult rv;
nsCOMPtr<nsIDOMDocument> domDocument;
rv = dom_window->GetDocument(getter_AddRefs(domDocument));
if (NS_FAILED(rv)) printf("GetDOMDocument failed rv = %08X\n",
rv);
nsCOMPtr<nsIDOMNodeList> nodelist;
rv = domDocument->GetElementsByTagName(NS_LITERAL_STRING
("*"),getter_AddRefs(nodelist));
if (NS_FAILED(rv)) printf("GetElements by tag name failed %08X\n",
rv);
nsCOMPtr<nsIDOMDocumentView> domView = do_QueryInterface
(domDocument,&rv);
if(NS_FAILED(rv) || !domView) printf("domView failed %08X\n", rv);
nsCOMPtr<nsIDOMAbstractView> abstractView;
rv = domView->GetDefaultView(getter_AddRefs(abstractView));
if(NS_FAILED(rv) || !abstractView) printf("abstractView failed %08X
\n", rv);
nsCOMPtr<nsIDOMViewCSS> viewCSS;
viewCSS = do_QueryInterface(abstractView, &rv);
if(NS_FAILED(rv) || !viewCSS) printf("viewCSS failed %08X\n", rv);
PRUint32 numelements = 0;
rv = nodelist->GetLength(&numelements);
if (NS_FAILED(rv)) printf("GetLength failed %08X\n", rv);
printf("Number of elements is %d\n", numelements);
}
Can someone please help us figure out why this isn't working and (more
importantly) how to get at the DOM in the new embedding API?
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding