2

非常に単純なブラウザー (HTML と JS Ext を解析できる) を Gtk ウィジェット (願わくば gtkmm) に埋め込む必要があります。gtkmozembed を調べてみたのですが、c++ ラッパーがかなり古いので、C だけで書いてみましたが、既に Gtk+ 3.0 にコミットしており、gtkmozembed は Gtk+ 3.0 では動作しません。Gtk::Widget を拡張して gecko パーサーを入れる方法はありますか? gecko のドキュメントがまったく見つかりません。gtkmozembed にリダイレクトされ続けます。

どんなアイデア/提案も大歓迎です。

編集: @Mark Webkitgtk を使用しようとした後、次の出力が表示され、アプリケーションがクラッシュします。

** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded
** (ttocui_gtk:16360): DEBUG: NP_Initialize
** (ttocui_gtk:16360): DEBUG: NP_Initialize succeeded

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_foreach: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_insert_internal: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
*** NSPlugin Wrapper *** ERROR: no valid NPP -> PluginInstance mapping found

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
*** NSPlugin Wrapper *** ERROR: no valid NPP -> PluginInstance mapping found

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_insert_internal: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_insert_internal: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_find: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_insert_internal: assertion `hash_table != NULL' failed

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
*** NSPlugin Wrapper *** ERROR: no valid NPP -> PluginInstance mapping found

(ttocui_gtk:16360): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
ttocui_gtk: /build/buildd/nspluginwrapper-1.2.2/src/npw-rpc.c:1225: do_recv_NPObject: Assertion `npobj != ((void *)0)' failed.
*** NSPlugin Viewer  *** ERROR: NPN_GetProperty() wait for reply: Connection reset by peer
*** NSPlugin Viewer  *** WARNING:(/build/buildd/nspluginwrapper-1.2.2/src/npw-viewer.c:898):invoke_NPN_GetValue: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
Aborted
*** NSPlugin Viewer  *** WARNING: unhandled variable 18 (<unknown variable>) in NPN_GetValue()
*** NSPlugin Viewer  *** WARNING:(/build/buildd/nspluginwrapper-1.2.2/src/npw-viewer.c:898):invoke_NPN_GetValue: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))

.js ファイルは、HTML ページの head タグに含まれています...

<link rel="stylesheet" type="text/css" href="/ext3.2.1/resources/css/ext-all.css">
<link rel="stylesheet" type="text/css" href="/ext3.2.1/resources/css/xtheme-access.css"/>

<script type="text/javascript" src="/ext3.2.1/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="/ext3.2.1/ext-all-debug.js"></script>
4

3 に答える 3

8

私の記憶が正しければ、gtkmozembed は Gecko の新しいバージョンでも動作しません。探しているのはWebkitGTKです。少なくとも、特に Gecko に縛られていない場合はそうです。

于 2011-08-17T21:35:53.953 に答える
4

@ptomatoの回答への補遺として。WebKitGTK がその方法です。gtkmm/C++ ラッパーについては知りませんが、現在 gtkmm プロジェクトからうまく使用しています (幸いなことに、gtkmm/C++ では C gtk を非常に簡単に混在させることができます)。

WebKitWebView* pWebKitView = WEBKIT_WEB_VIEW (webkit_web_view_new ());
gtk_container_add (GTK_CONTAINER (pSomeContainer->gobj()), GTK_WIDGET (pWebKitView));

そして、あなたは行く...

于 2011-08-18T02:52:41.037 に答える
2

私が戻ってきて、私たちの解決策は Gtkmozembed を使用することであると気になる人に知らせようと思った. 唯一の問題は、Gtkmozembed が gtk+ 2 を使用してのみ実行され、私は gtk+ 3 を使用していることです。2 つが同じプロセスに存在することはできず、どちらのプロジェクトも移行していません。そのため、パイプを使用して通信する子プロセスで gtkmozembed を実行し、プロジェクトでウィジェットをレンダリングする GtkPlug を実行しています。

このソリューションは少しばかげていますが、仕事は完了し、ブラウザーは組み込まれています。

于 2011-11-04T14:25:39.547 に答える