veeru
2010-03-29 10:18:12 UTC
Hi,
I am developing an XPCOM component in c++. I am able to get number of
tabs currently opened using XBL. Please see the code below:
////////////////////////////////////////////C O D
E//////////////////////////////////////////
nsresult rv;
nsCOMPtr<nsIWindowMediator> windowMediator
= do_GetService(NS_WINDOWMEDIATOR_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv,rv);
PRUint32 len;
nsString temp;
nsCOMPtr<nsIDOMDocument> curDoc;
nsCOMPtr<nsIDOMElement> domEl;
nsCOMPtr<nsIDOMNodeList> tabbrowser;
nsCOMPtr<nsIDOMDocument> doc;
nsCOMPtr<nsIDOMWindowInternal> dwi;
windowMediator->GetMostRecentWindow(L"navigator:browser",
getter_AddRefs(dwi));
if (dwi)
{
dwi->GetDocument(getter_AddRefs(doc));
if (doc)
{
nsCOMPtr<nsIDOMDocumentXBL> xbl(do_QueryInterface(doc));
if (xbl)
return NS_ERROR_FAILURE;
doc->GetElementById(NS_LITERAL_STRING("content"),
getter_AddRefs(domEl));
if (domEl)
{
nsCOMPtr<nsIDOMElement> pAnoEl;
xbl->GetAnonymousElementByAttribute(domEl,
NS_LITERAL_STRING("anonid"), NS_LITERAL_STRING("tabcontainer"),
getter_AddRefs(pAnoEl));
if (pAnoEl)
{
nsCOMPtr<nsIDOMNodeList> nodeList;
pAnoEl->GetChildNodes(getter_AddRefs(nodeList));
if (nodeList)
{
nsCOMPtr<nsIDOMNode> domNode;
nodeList->GetLength(&len);
for (PRUint32 i = 0; i < len; i++)
{
nodeList->Item(i, getter_AddRefs(domNode));
curDoc =
do_QueryInterface(domNode); // fails here.
}
}
}
}
}
}
///////////////////////////////////END OF
CODE////////////////////////////////////////
Here I am getting number of tab, even I am able to set/get attributes.
But I am able to decide which is the currently selected tab. I tried
to use property and method from tabbrowser.xml, but failed.
Also I want to get the content of currently selected tab. But I tried
to QI nsIDOMNode for nsIDOMDocument, it failed. But in dependency
diagram on mozilla site, it is given that nsIDOMNode is derived form
nsIDOMDocument.
How can I get the current tab content, DOM pointer and its index?
Please help me, I am stuck to it.
Thank you in advance.
I am developing an XPCOM component in c++. I am able to get number of
tabs currently opened using XBL. Please see the code below:
////////////////////////////////////////////C O D
E//////////////////////////////////////////
nsresult rv;
nsCOMPtr<nsIWindowMediator> windowMediator
= do_GetService(NS_WINDOWMEDIATOR_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv,rv);
PRUint32 len;
nsString temp;
nsCOMPtr<nsIDOMDocument> curDoc;
nsCOMPtr<nsIDOMElement> domEl;
nsCOMPtr<nsIDOMNodeList> tabbrowser;
nsCOMPtr<nsIDOMDocument> doc;
nsCOMPtr<nsIDOMWindowInternal> dwi;
windowMediator->GetMostRecentWindow(L"navigator:browser",
getter_AddRefs(dwi));
if (dwi)
{
dwi->GetDocument(getter_AddRefs(doc));
if (doc)
{
nsCOMPtr<nsIDOMDocumentXBL> xbl(do_QueryInterface(doc));
if (xbl)
return NS_ERROR_FAILURE;
doc->GetElementById(NS_LITERAL_STRING("content"),
getter_AddRefs(domEl));
if (domEl)
{
nsCOMPtr<nsIDOMElement> pAnoEl;
xbl->GetAnonymousElementByAttribute(domEl,
NS_LITERAL_STRING("anonid"), NS_LITERAL_STRING("tabcontainer"),
getter_AddRefs(pAnoEl));
if (pAnoEl)
{
nsCOMPtr<nsIDOMNodeList> nodeList;
pAnoEl->GetChildNodes(getter_AddRefs(nodeList));
if (nodeList)
{
nsCOMPtr<nsIDOMNode> domNode;
nodeList->GetLength(&len);
for (PRUint32 i = 0; i < len; i++)
{
nodeList->Item(i, getter_AddRefs(domNode));
curDoc =
do_QueryInterface(domNode); // fails here.
}
}
}
}
}
}
///////////////////////////////////END OF
CODE////////////////////////////////////////
Here I am getting number of tab, even I am able to set/get attributes.
But I am able to decide which is the currently selected tab. I tried
to use property and method from tabbrowser.xml, but failed.
Also I want to get the content of currently selected tab. But I tried
to QI nsIDOMNode for nsIDOMDocument, it failed. But in dependency
diagram on mozilla site, it is given that nsIDOMNode is derived form
nsIDOMDocument.
How can I get the current tab content, DOM pointer and its index?
Please help me, I am stuck to it.
Thank you in advance.