gtk+gtkmozembed linux嵌入firefox

2008-04-14 00:06

@auth:gulunmu@163.com

@date:2008-04-13

@des:linux下应用gtkmozembed+gtk嵌入firefox,处理绘图完成后的dom树

code: test.cpp

#include <gtk/gtk.h>
#include <gtkmozembed.h>
#include "gtkmozembed_internal.h"

//#include "MozillaBrowserXPCOM.h"
//#include "XPCOMUtil.h"


#include <nsIURIContentListener.h>
#include <nsIWebBrowser.h>


#include "nsXPCOM.h"
#include "nscore.h"
#include "nsEmbedAPI.h"
#include "nsWeakReference.h"
#include "nsIWebBrowserChrome.h"
#include "nsIEmbeddingSiteWindow.h"
#include "nsCOMPtr.h"
#include "nsIInterfaceRequestor.h"
#include "nsEmbedString.h"
#include "nsIWebBrowser.h"
#include "widget/nsIBaseWindow.h"
#include "nsEmbedCID.h"
#include "nsComponentManagerUtils.h"
#include "nsIWebProgressListener.h"
#include "docshell/nsIWebNavigation.h"
#include "docshell/nsIDocShellTreeItem.h"
#include "iostream"

//dom
#include <nsIDOMCSSStyleDeclaration.h>
#include <nsIDOMDocument.h>
#include <nsIDOMDocumentFragment.h>
#include <nsIDOMDocumentRange.h>
#include <nsIDOMElement.h>
#include <nsIDOMElementCSSInlineStyle.h>
#include <nsIDOMMouseEvent.h>
//#include "nsIDOMNSHTMLElement.h"
//#include "nsIDOMNSRange.h"
#include <nsIDOMNodeList.h>
#include <nsIDOMRange.h>
#include <nsIDOMWindow.h>

#define HAS_WEBBROWSER 1


//extern void gtk_moz_embed_get_nsIWebBrowser(GtkMozEmbed *embed, nsIWebBrowser **retval);
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *label;
GtkWidget *mozembed;
GtkWidget *container;
char *url;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);


///
mozembed = gtk_moz_embed_new();

gtk_signal_connect(GTK_OBJECT(mozembed), "destroy",
    GTK_SIGNAL_FUNC(gtk_main_quit),
    NULL);


gtk_container_add(GTK_CONTAINER(window), mozembed);

/

gtk_widget_set_usize(window, 800,600);
gtk_widget_show(mozembed);
gtk_widget_show(label);
gtk_widget_show_all(window);

//url = (argc > 1) ? argv[1] : (char *)"www.google.com";
//gtk_moz_embed_load_url(GTK_MOZ_EMBED(mozembed), url);


#ifdef HAS_WEBBROWSER
nsCOMPtr<nsIBaseWindow> baseWindow;
nsCOMPtr<nsIWebBrowser> webBrowser;
nsresult rv;


gtk_moz_embed_get_nsIWebBrowser(GTK_MOZ_EMBED(mozembed), getter_AddRefs(webBrowser));
if( webBrowser == nsnull )
{
   printf("webBrowser load error ");
   return -1;
}
nsCOMPtr<nsIWebNavigation> webNav = do_QueryInterface(webBrowser, &rv);
if ( NS_FAILED(rv) ) return rv;
printf(" get nsIWebNavigation success./n");


baseWindow = do_QueryInterface(webBrowser, &rv);
if ( NS_FAILED(rv) ) return rv;
printf("baseWindow queried./n");


char asciiURI[] = "http://www.baidu.com";
nsString nsURI = NS_ConvertUTF8toUTF16( asciiURI, strlen(asciiURI) );
if(webNav)
   webNav->LoadURI(nsURI.get(),
     nsIWebNavigation::LOAD_FLAGS_NONE, // Load flags
     nsnull,                            // Referring URI
     nsnull,                            // Post data
     nsnull);

printf("load uri success./n");

//begin to deal dom
nsCOMPtr<nsIDOMWindow>    DOMWindow;
nsCOMPtr<nsIDOMDocument>       DOMDocument;
webBrowser->GetContentDOMWindow(getter_AddRefs(DOMWindow));
if(nsnull == DOMWindow) {
   g_warning("could not retrieve DOM window...");
   return -1;
}

rv = DOMWindow->GetDocument(getter_AddRefs(DOMDocument));
if( NS_FAILED(rv)) return rv;
       

    //end ceal dom
#endif
    //
   
    gtk_main();

    return 0;
    }

makefile:

MOZ_ROOT=/mozilla/xulrunner-build

LDFLAGS=-lpthread -Wl,-rpath -Wl,${MOZ_ROOT}/dist/bin/ -Wl,-rpath -Wl,${MOZ_ROOT}/dist/lib -L${MOZ_ROOT}/dist/lib/ -lxpcom -lnspr4

CXXFLAGS= -ggdb -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wno-long-long -pedantic -fshort-wchar -pthread -pipe -DDEGUG -D_DEBUG -DDEBUG_root -DTRACTING -fno-inline -O -DNDEBUG -DTRIMMED -O -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12

COMPILE_CFLAGS= -I ${MOZ_ROOT}/dist/include/system_wrappers -include ${MOZ_ROOT}/../config/gcc_hidden.h -DMOZILLA_STRICT_API -DOSTYPE="Linux2.6.23.1" -DOSARCH="Linux" -DBUILD_ID=0000000000 -I ${MOZ_ROOT}/dist/include/xpcom -I${MOZ_ROOT}/dist/include/intl -I${MOZ_ROOT}/dist/include/embedcomponents -I${MOZ_ROOT}/dist/include   -I${MOZ_ROOT}/dist/include/embed_base -I${MOZ_ROOT}/dist/include/nspr -I${MOZ_ROOT}/dist/include/gtkembedmoz -DMOZ_PNG_READ -DMOZ_PNG_WRITE   -I${MOZ_ROOT}/dist/sdk/include -Wall -W -Wno-unused -Wpointer-arith -Wcast-align -Wno-long-long -pedantic -pthread -pipe -DNDEBUG -DTRIMMED -O   -include ${MOZ_ROOT}/mozilla-config.h -DMOZILLA_CLIENT

 

all: TTest

#TTest: test.o
# g++ -o TTest $(LDFLAGS) `pkg-config --libs gtk+-2.0` test.o ${MOZ_ROOT}/embedding/base/libembed_base_s.a ${MOZ_ROOT}/xpcom/glue/standalone/libxpcomglue.a ${MOZ_ROOT}/embedding/base/libembed_base_s.a

TTest: test.o
g++ -o TTest $(LDFLAGS) `pkg-config --libs gtk+-2.0` test.o ${MOZ_ROOT}/embedding/base/libembed_base_s.a -L${MOZ_ROOT}/dist/lib -lxpcomglue ${MOZ_ROOT}/embedding/base/libembed_base_s.a -lgtkembedmoz


test.o:test.cpp
g++ -c $(CXXFLAGS) $(COMPILE_CFLAGS) `pkg-config --cflags gtk+-2.0` $< -o $@

clean:
rm *.o TTest

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值