HI,
I am trying to write an extension in c++ ,I want to control firefox
navigation,like Back,load some uri and so on,but I can't find any examples
in google.I wrote some code like this:

part 1:
nsCOMPtr<nsISimpleEnumerator> windowEnumerator;
if(NS_FAILED(mediator->GetEnumerator(nsnull,getter_AddRefs(windowEnumerator))))
       {
           printf("fail to get window enumerator \n");

       }
     nsCOMPtr<nsIDOMWindowInternal> domwindow;
     mediator->GetMostRecentWindow(nsnull,getter_AddRefs(domwindow));
     nsCOMPtr<nsIDOMHistory> history;
     rv=topwindow->GetHistory(getter_AddRefs(history));
     if(!NS_FAILED(rv))
     {
                  rv=history->Back();
                  if(NS_FAILED(rv))
                  {
                            printf("Open failed 0x%08x\n",rv);
                    }
       }
       else
              printf("history is null\n");


part2:
nsCOMPtr<nsISimpleEnumerator> windowEnumerator;
if(NS_FAILED(mediator->GetEnumerator(nsnull,getter_AddRefs(windowEnumerator))))
       {
           printf("fail to get window enumerator \n");

       }
     nsCOMPtr<nsIDOMWindowInternal> domwindow;
     mediator->GetMostRecentWindow(nsnull,getter_AddRefs(domwindow));

      nsCOMPtr<nsIScriptGlobalObject> globalObject =
do_QueryInterface(domwindow);

                           if(!globalObject)
                           {
                                   printf("error query
nsIScriptGlobalObject\n");
                           }
                           nsCOMPtr<nsIDocShell>aDocShell =
globalObject->GetDocShell();
                           if(aDocShell)
                               getter_AddRefs(aDocShell);
                           else
                                   printf("get nsIDocShell object fail\n");

                           nsCOMPtr<nsIWebNavigation>
nav=do_QueryInterface(domwindow);
                           if(!nav)
                           {
                                   printf("error query
nsIWebNavigation\n");
                                   continue;
                           }
                           getter_AddRefs(nav);

                           nsCOMPtr<nsIDocShellTreeItem>
itemlist=do_QueryInterface(nav);
                           if(!itemlist)
                           {
                                   printf("error query nsIDocShellItem\n");
                                   continue ;

                           }
                           getter_AddRefs(itemlist);

                           nsCOMPtr<nsIDocShellTreeItem> rootItem;

rv=itemlist->GetRootTreeItem(getter_AddRefs(rootItem));
                           if(NS_FAILED(rv))
                           {
                                   printf("error getRootTreeItem
0x%08x\n",rv);
                                   continue;

                           }

                           nsCOMPtr<nsIDOMWindow> lastWindow
=do_QueryInterface(rootItem);
                           if(!lastWindow)
                           {
                                   printf("error get lastWindow\n");
                                   continue;
                           }
                           getter_AddRefs(lastWindow);

                           nsCOMPtr<nsIDOMChromeWindow>
chromeWindow(do_QueryInterface(domwindow));


                         if(!chromeWindow)
                           {
                                   printf("error get  chrome window\n");
                                   continue;

                           }

                           printf("after get chromeWindow \n");
                           getter_AddRefs(chromeWindow);

                           nsCOMPtr<nsIBrowserDOMWindow> browser;

rv=chromeWindow->GetBrowserDOMWindow(getter_AddRefs(browser));
                           if(NS_FAILED(rv))
                           {
                                   printf("error get nsIBrowserDOMWindow
0x%08x\n",rv);
                                   continue;
                           }

                           printf("after getBrowserDOMWindow\n");
                           if(!browser)
                           {
                                   printf("can't get
nsIBrowserDOMWindow\n");
                                   break;
                           }
                           nsCOMPtr<nsIDOMWindow> newwindow;

rv=browser->OpenURI(nsnull,nsnull,nsIBrowserDOMWindow::OPEN_NEWTAB,nsIBrowserDOMWindow::OPEN_NEW,getter_AddRefs(newwindow));



neither worked;
system is linux,firefox version is 2.0.
I realy eager to resove this problem,any suggestion will be helpful
thanks;

mac
kemp video
_______________________________________________
dev-tech-xpcom mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-xpcom

Reply via email to