Встроить веб-браузер в кросс-платформенное приложение Gtk - PullRequest
2 голосов
/ 17 августа 2011

Мне нужно встроить очень простой браузер (может анализировать HTML и JS Ext) в виджет Gtk, надеюсь, в gtkmm.Я изучил gtkmozembed, но оболочка c ++ очень устарела, поэтому я попытался написать ее на C, но я уже привержен Gtk + 3.0, а gtkmozembed не работает с Gtk + 3.0.Есть ли способ просто расширить Gtk :: Widget и добавить в него анализатор геккона?На самом деле не могу найти никакой документации по гекконам, я продолжаю перенаправляться на 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-файл включен в тег head моих html-страниц ...

<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>

Ответы [ 3 ]

8 голосов
/ 18 августа 2011

gtkmozembed также не работает с новыми версиями Gecko, если мне не изменяет память. То, что вы ищете, это WebkitGTK , по крайней мере, если вы не привязаны к Gecko.

4 голосов
/ 18 августа 2011

В качестве дополнения к ответу @ 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));

И пошли ...

2 голосов
/ 04 ноября 2011

Просто подумал, что вернусь и сообщу всем, кому небезразлично, что нашим решением было использование Gtkmozembed.Единственная проблема в том, что Gtkmozembed работает только с использованием gtk + 2, а я использую gtk + 3. Эти два не могут существовать в одном и том же процессе, и я не переношу ни один из проектов.Итак, я запускаю gtkmozembed в дочернем процессе, с которым я использую каналы для связи, и GtkPlug, который визуализирует виджет в моем проекте.

Это решение немного сложное, но оно выполняет свою работу, ибраузер встроен.

...