ここにいます: Unix プロジェクトページ > GtkMozEmbed: Mozilla の Gtk アプリケーションへの組み込み
GtkMozEmbed は使いやすいウィジェットで、これを使えば Gtk アプリケーションに Mozilla ブラウザウィンドウを組み込むことができます。
使うときの敷居をできるだけ低くするため、使いやすくて単純明解であるように作られています。これは触れることのできる機能は全機能の約80%を含むべきであるということです。これは Mozilla の中枢をなす高度な機能を利用したければ、自分で組み込みウィジェットを書かねばならないということです。
将来(M16 の後)、私は組み込みウィジェットから基礎をなしている nsIWebBrowser の実装を扱えるようにするつもりです。これによって Mozilla の内部インターフェースが利用可能であることが必要な人達に、それを行う方法を提供します。
さらに、Gtk Mozilla 組み込みウィジェットを使うということは組み込みを行うコードが C++ に依存しないということです。これは C を好み C++ を嫌う人達にとって重要です。
質問/コメント、あるいは誤りの指摘はどのようなものであっても Christopher Blizzard <blizzard@mozilla.org> に送ってください。
gtkmozembed.h
extern GtkType gtk_moz_embed_get_type (void); extern GtkWidget *gtk_moz_embed_new (void); extern void gtk_moz_embed_set_comp_path (char *aPath); extern void gtk_moz_embed_load_url (GtkMozEmbed *embed, const char *url); extern void gtk_moz_embed_stop_load (GtkMozEmbed *embed); extern gboolean gtk_moz_embed_can_go_back (GtkMozEmbed *embed); extern gboolean gtk_moz_embed_can_go_forward (GtkMozEmbed *embed); extern void gtk_moz_embed_go_back (GtkMozEmbed *embed); extern void gtk_moz_embed_go_forward (GtkMozEmbed *embed); extern void gtk_moz_embed_render_data (GtkMozEmbed *embed, const char *data, guint32 len, const char *base_uri, const char *mime_type); extern void gtk_moz_embed_open_stream (GtkMozEmbed *embed, const char *base_uri, const char *mime_type); extern void gtk_moz_embed_append_data (GtkMozEmbed *embed, const char *data, guint32 len); extern void gtk_moz_embed_close_stream (GtkMozEmbed *embed); extern char *gtk_moz_embed_get_link_message (GtkMozEmbed *embed); extern char *gtk_moz_embed_get_js_status (GtkMozEmbed *embed); extern char *gtk_moz_embed_get_title (GtkMozEmbed *embed); extern char *gtk_moz_embed_get_location (GtkMozEmbed *embed); extern void gtk_moz_embed_reload (GtkMozEmbed *embed, gint32 flags); extern void gtk_moz_embed_set_chrome_mask (GtkMozEmbed *embed, guint32 flags); extern guint32 gtk_moz_embed_get_chrome_mask (GtkMozEmbed *embed);
gtkmozembed_internal.h
extern void gtk_moz_embed_get_nsIWebBrowser (GtkMozEmbed *embed, nsIWebBrowser **retval);
引数: | void |
戻り値: | GtkWidget * |
この関数は新しい Gtk Mozilla 組み込みウィジェットを返します。 失敗した場合は NULL を返します。 |
引数: | const char *aPath |
戻り値: | void |
この関数は最初のウィジェットが作成されるか XPCOM が初期化される前に呼ばれなければなりません。この関数によって mozilla コンポーネントへのパスを設定できます。 |
引数: |
GtkMozEmbed *embed const char *url |
戻り値: | void |
この関数の呼び出しで組み込みウィジェットへの url の読み込みが始まります。読み込みはすべて非同期です。url 引数は http://www.gnome.org のような形式にすべきです。 |
引数: | GtkMozEmbed *embed |
戻り値: | void |
この関数によってウィジェットで読み込んでいるドキュメントの読み込みを止めることができます。 |
引数: | GtkMozEmbed *embed |
戻り値: | gboolean |
この関数はドキュメントの移動履歴で戻ることができるかどうかを返します。戻ることができる場合は TRUE を返し、できない場合は FALSE を返します。 |
引数: | GtkMozEmbed *embed |
戻り値: | gboolean |
この関数はドキュメントの移動履歴で進むことができるかどうかを返します。進むことができる場合は TRUE を返し、できない場合は FALSE を返します。 |
引数: | GtkMozEmbed *embed |
戻り値: | void |
この関数はドキュメントの移動履歴で一つ分戻します。 |
引数: | GtkMozEmbed *embed |
戻り値: | void |
この関数はドキュメントの移動履歴で一つ分進みます。 |
引数: |
GtkMozEmbed *embed const char *data guint32 len const char *base_uri const char *mime_type |
戻り値: | void |
この関数によって大量のランダムなデータを受け取り、それをドキュメントにレンダリングできます。データとデータ長を渡す必要があります。base_uri はドキュメント内の内部参照を分析するのに使われ、mime_type は内部でどのようにドキュメントをレンダリングするのかを決めるのに使われます。 |
引数: |
GtkMozEmbed *embed const char *base_uri const char *mime_type |
戻り値: | void |
この関数は外部入力源から組み込みウィジェットへドキュメントを読み込み始めるのに使われます。内部リンクの分析のための base_uri やドキュメントの mime_type を渡す必要があります。 |
引数: |
GtkMozEmbed *embed const char *data guint32 len |
戻り値: | void |
この関数によってウィジェットで既に開いたストリームへデータを追加できるようにします。ドキュメントに追加したいデータやその長さを渡す必要があります。 |
引数: | GtkMozEmbed *embed |
戻り値: | void |
この関数は組み込みウィジェットへ手動でデータを追加するのに使用していたストリームを閉じます。 |
gtk_moz_embed_get_link_message
引数: | GtkMozEmbed *embed |
戻り値: | char * |
この関数は現在のリンクのメッセージがあればそれを返します。返された文字列は new で割り当てられたもので文字列を開放することは呼び手の責任です。 |
引数: | GtkMozEmbed *embed |
戻り値: | char * |
この関数は js_status メッセージがあればそれを返します。返された文字列は new で割り当てられたもので文字列を開放することは呼び手の責任です。 |
引数: | GtkMozEmbed *embed |
戻り値: | char * |
この関数はドキュメントの現在のタイトルを得ます。返された文字列は new で割り当てられたもので文字列を開放することは呼び手の責任です。 |
引数: | GtkMozEmbed *embed |
戻り値: | char * |
この関数はドキュメントの現在の場所を返します。文字列は new で割り当てられたもので文字列を開放することは呼び手の責任です。 |
引数: |
GtkMozEmbed *embed gint32 flags |
戻り値: | void |
この関数はドキュメントの再読み込みをします。フラグ引数は再読み込みの振舞を制御するのに使われます。フラグ引数は以下の値の中の一つをとれます:
GTK_MOZ_EMBED_FLAG_RELOADNORMAL GTK_MOZ_EMBED_FLAG_RELOADBYPASSCACHE GTK_MOZ_EMBED_FLAG_RELOADBYPASSPROXY GTK_MOZ_EMBED_FLAG_RELOADBYPASSPROXYANDCACHE |
引数: | GtkMozEmbed *embed guint32 flags |
戻り値: | void |
この関数はこのウィンドウに対する chrome マスクを設定するのに使われます。マスクは以下の値の任意の論理和に設定できます:
GTK_MOZ_EMBED_FLAG_DEFAULTCHROME GTK_MOZ_EMBED_FLAG_WINDOWBORDERSON GTK_MOZ_EMBED_FLAG_WINDOWCLOSEON GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON GTK_MOZ_EMBED_FLAG_MENUBARON GTK_MOZ_EMBED_FLAG_TOOLBARON GTK_MOZ_EMBED_FLAG_LOCATIONBARON GTK_MOZ_EMBED_FLAG_STATUSBARON GTK_MOZ_EMBED_FLAG_PERSONALTOOLBARON GTK_MOZ_EMBED_FLAG_SCROLLBARSON GTK_MOZ_EMBED_FLAG_TITLEBARON GTK_MOZ_EMBED_FLAG_EXTRACHROMEON GTK_MOZ_EMBED_FLAG_WINDOWRAISED GTK_MOZ_EMBED_FLAG_WINDOWLOWERED GTK_MOZ_EMBED_FLAG_CENTERSCREEN GTK_MOZ_EMBED_FLAG_DEPENDENT GTK_MOZ_EMBED_FLAG_MODAL GTK_MOZ_EMBED_FLAG_OPENASDIALOG GTK_MOZ_EMBED_FLAG_OPENASCHROME GTK_MOZ_EMBED_FLAG_ALLCHROME |
引数: | GtkMozEmbed *embed |
戻り値: | guint32 |
この関数によってこのウィンドウに対する現在の chrome マスクが得られます。返すマスクに関して gtk_moz_embed_set_chrome_mask に対するドキュメントを見てください。 |
gtk_moz_embed_get_nsIWebBrowser
引数: |
GtkMozEmbed *embed nsIWebBrowser **retval |
戻り値: | void |
この関数によって基礎をなしているウィジェットに対する nsIWebBrowser を得ることができます。あらゆる優れた XPCOM 関数がするように、この関数は戻るときに nsIWebBrowser への参照を追加します。 |
link_message
関数プロトタイプ |
void link_message_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはリンクメッセージが変わったときに発行されます。これはウェブページでユーザがリンク上でマウスを動かしたときに起きます。リンクメッセージの実際の値を得るのに gtk_moz_embed_get_link_message を使ってください。 |
js_status
関数プロトタイプ |
void js_status_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルは JavaScript ステータスメッセージが変わったときに発行されます。ステータスメッセージの実際の値を得るのに gtk_moz_embed_get_js_status を使ってください。 |
location
関数プロトタイプ |
void location_changed_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはドキュメントの場所が変わったときはいつでも発行されます。場所の実際の値を得るのに gtk_moz_embed_get_location を使ってください。 |
title
関数プロトタイプ |
void title_changed_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはドキュメントのタイトルが変わったときはいつでも発行されます。タイトルの実際の値を得るのに gtk_moz_embed_get_title の呼び出しを使ってください。 |
progress
関数プロトタイプ |
void progress_change_cb (GtkMozEmbed *embed, gint cur, gint max, gpointer data);
|
このシグナルはドキュメントの読み込みの進捗に変化があったときはいつでも発行されます。 cur の値はどれだけドキュメントがダウンロードされたのかを示します。 max の値はドキュメントの長さを示します。もし max の値が1よりも短ければ、ドキュメント全体の長さが決められません。 |
net_status [ 非推奨 - net_state を使ってください ]
関数プロトタイプ |
void net_status_change_cb (GtkMozEmbed *embed, gint flags, gpointer data);
|
このシグナルはネットワークの読み込みの状態に変化があるときに発行されます。 [ フラグについての情報をここに書き込んでください。 ] |
net_state
関数プロトタイプ |
void net_state_change_cb (GtkMozEmbed *embed, gint flags, guint status, gpointer data);
|
このシグナルはドキュメントの読み込みの状態に変化があるときに発行されます。 [ フラグについての情報をここに書き込んでください。 ]【訳注: TestGtkEmbed.cpp に net_state_change_cb() 関数のプロトタイプと定義があります。また、gtkmozembed.h でフラグが定義されています。】 |
net_start
関数プロトタイプ |
void load_started_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはドキュメントの読み込みが始まったときはいつでも発行されます。 |
net_stop
関数プロトタイプ |
void load_finished_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはドキュメントの読み込みが完了したときはいつでも発行されます。 |
new_window
関数プロトタイプ |
void new_window_cb (GtkMozEmbed *embed, GtkMozEmbed **retval, guint chromemask, gpointer data);
|
このシグナルはドキュメントによってあたらしいトップレベルドキュメントが要求されたときはいつでも発行されます。これは JavaScript で window.open() が呼ばれた場合に起きます。このシグナルに応答することで新しいトップレベルウィンドウを chrome で囲むことができます。新しく作成した GtkMozEmbed オブジェクトを retval を通して返すべきです。 |
visibility
関数プロトタイプ |
void visibility_cb (GtkMozEmbed *embed, gboolean visibility, gpointer data);
|
このシグナルは問題のトップレベルウィンドウを表示するか隠す必要があるときに発行されます。visibility 引数が TRUE の場合はウィンドウは表示されるはずです。FALSE の場合は隠されるはずです。 |
destroy_browser
関数プロトタイプ |
void destroy_brsr_cb (GtkMozEmbed *embed, gpointer data);
|
このシグナルはドキュメントがトップレベルウィンドウを閉じるように要求したときに発行されます。これは JavaScript で window.close() が呼ばれた場合に起こります。
|
open_uri
関数プロトタイプ |
gint open_uri_cb (GtkMozEmbed *embed, const char *uri, gpointer data);
|
このシグナルは、例えばウェブページ内のリンクをクリックしたときなど、ドキュメントが新しいドキュメントを読み込もうとしたときに発行されます。このシグナルにより組み込みをする人は新しいドキュメントが読み込まれないようにする手段を得ます。uri 引数は読み込まれることになる uri です。 このシグナルから TRUE を返した場合、新しいドキュメントは読み込まれません。FALSE を返した場合は新しいドキュメントを読み込みます。これはやや直感に反します。Mozilla のエンジンが新しいドキュメントの読み込みを中断したいかどうか尋ねているとして考えてください。TRUE を返すことで「このドキュメントを読み込むな。」と言っていることになります。 |
古くさい Mozilla のスクロールバーの代わりに Gtk ネイティブなスクロールバーをどのように使うのですか。
簡単な解答は使えないというものです。他のフォーラムでじっくり議論された理由で Mozilla は独自のネイティブなスクロールバーを使っています。将来には gtk スクロールバーのルックアンドフィールを作る他の答えがあるかもしれません。この問題に引き続き注目してください。
まだこれはできません。 [ ここにバグ番号を書いてください。【訳注: #129321がこれに相当すると思われます】 ]
ドキュメント内の画像や他のリソースの読み込みを捕捉する方法はありますか。
ドキュメント内の画像やマルチメディアリソースを Mozilla が取得方法のわからない他のリソースから取ってくるかもしれない場合に、コンテンツの一部を手動でレンダリングすることになるかもしれないので、この質問がなされます。この意見は、プロトコルハンドラ全体を書かずにこれをできるようにし、組み込みインターフェースやある種のコールバックを通してメディアタイプに対するドキュメントハンドラへデータを得られるようにしたいというものです。
Mozilla のアーキテクチャーではまだこれを行えませんがこの機能を使えるようにするバグがあります。 [ ここにバグ番号を挿入してください。 ]
net_status フラグは新しいフラグを持つ net_state シグナルで置き換えられました。これは mozilla 内のプログレスリスナーの根本的な変更によるものです。
新しい関数 gtk_moz_embed_set_comp_path が追加されました。
gtkmozembed_internal.h
ヘッダを追加しました。これにより mozilla に特化したデータを得ることができます。mozilla のすべてのヘッダーがインストールされていなくてもウィジェットを使えることはよいことなので、gtkmozembed.h とは分かれています。
新しい関数 gtk_moz_embed_get_nsIWebBrowser が追加されました。
M16 で勇敢ではないプログラマでも使える組み込みウィジェットの最初のバージョンに達しました。
最後のリリースから次の関数が追加されました:
次のシグナルが追加されました:
既知の問題:
組み込みウィジェットの最初のリリース。url の読み込み以外あまりできません。Gtk のフォーカスモデルでうまく動かず、けっこうクラッシュしやすいです。
Blizzard