4年ぶりの更新でございます.XULRunner 6.0だといろいろ面倒なので7.0以降対応です.Windows 7で動作を確認しています.
wxWidgets2.9.3 からwxWebViewCtrlが使えるようになるらしいんですけど,こいつはWindowsではIE,Gtk環境とMacではWebKitを使うようになってます.GeckoめんどいしwxWebViewCtrlかwxWebKitにごっそり移行したいですね.
最高のタイミングで横合いから思い切り殴りつける
4年ぶりの更新でございます.XULRunner 6.0だといろいろ面倒なので7.0以降対応です.Windows 7で動作を確認しています.
wxWidgets2.9.3 からwxWebViewCtrlが使えるようになるらしいんですけど,こいつはWindowsではIE,Gtk環境とMacではWebKitを使うようになってます.GeckoめんどいしwxWebViewCtrlかwxWebKitにごっそり移行したいですね.
CIDからHTMLDocumentが作成できるのはnanto_viさんが書いているとおり.DonutGにサムネイル機能を搭載するにあたって,nsICanvasRenderingContextInternalのインスタンスを作って,そこからコンテキストを作るのがいいらしいとなったのだけれど,風博士のソースを見る限り,MOZILLA_INTERNAL_APIというマクロをオンにしないとたぶん使えない.んで,それを回避するために,CIDから空のHTMLDocumentを作ってCanvas要素を作ればいいんじゃね?と考えた.試したところ問題なく動いた.以下はExtension Developer上で試したコード.Shell.enumWinsという変数で,今開いているウィンドウの配列が取得できる.
const NS_HTMLDOCUMENT_CID = '{5d0fcdd0-4daa-11d2-b328-00805f8a3859}'; var doc = Components.classesByID[NS_HTMLDOCUMENT_CID].createInstance(); var canvas = doc.createElement("canvas"); var ctx = canvas.getContext('2d'); ctx.drawWindow(Shell.enumWins[1].content, 0,0,300,300, "rgb(255,255,255)"); var str = canvas.toDataURL();
これがstrの内容の画像:
IWebBrowser2に続きIHTMLDocument2も4箇所に減った.
今困っているのは,Windowのサムネイルを取得する方法と,nsIWebBrowserFocus::Activateしているのに実際にはActivateされないという怪現象.
サムネイルのほうは,MOZILLA_INTERNAL_APIをオンにしないでやる方法を探している.なので,本当に困ったらそれを使えばよく,クリティカルではない.
フォーカスは…どうしたものか.前WTLでGecko組み込んだときはこんなこと起こらなかったぞ?
いつの間にかv0.1.8になっていた.残りの
をどうにかすれば,一通り使えるようになる.しかしすごいな,ソースコード中で「IWebBrowser2」が登場する箇所が4箇所にまで減ったwww 次はIHTMLDocument2を撲滅していこう.
目下のところ困っているのは,nsIWebBrowserFocus::activateを呼んでいるのに,実際にはactivateされないこと.いったんタブを切り替えたり,リンクをクリックしたり,テキストボックスをクリックしたりすると,やっとactivateされる.ウィンドウズプログラミングムズカシイネー
例によって低品質なり。未実装部分は向こうを見てください。
http://tnose.net/tmp/DonutG.zip
閲覧ができるだけの代物で、戻るボタンさえ動きません。使い方はReadme.txt読んでください。
いつのまにかVS9でコンパイルが通るソースが出ていたのね。
Donutの肝はDonutView, IWebBrowserEvents2Impl, CWebBrowser2, ChildFrameあたり.で,CWebBrowser2はIWebBrowser2の単なるラッパ.IWebBrowserEvents2Implがイベントリスナ.IWebBrowserEvents2Implを継承したクラス(ChildFrame)からWebBrowserEvents2Adviseを呼び出すと,IWebBrowser2と接続されるというわけか.
骨は折れるけれども,Geckoを使うようにすることはそんなに難しくないんじゃないかって気がしてきた.
一時期、新しい組み込み用APIをつくろう!と言っていた人がいたのだけれど、とんと進捗を聞かないので見てみたら案の定放置状態。
でも、よくよく見てみるとWindows上のQtでも使えるように作ってあって(WindowsのときのみネイティブなGeckoを呼び出す)、こりゃあいいということで試してみた。
LinuxではQt版Geckoを呼び出すようになっていたのだけれど、hg.mozilla.orgにあるソースではSIGSEGVを吐いて落ちる。Qt版Geckoの場合、mozView.CreateBrowserに渡すnativeWindowはどうやらQGraphicsWidgetでないといけないようだったので(WindowsのときはQWidget::winId()がHWNDと同じなので、こいつを渡せばOK)、多少改造を加えて動くようにした(もとのはQWidgetを渡していた)。現在のはウィンドウのリサイズに追随しないんでそこんとこよろしく。
ああ、はやく日本語入力が通るようにならないかしら。ちょっくら調査してみるかなあ。
ところで、QtアプリケーションでGtkのウィジェットをホストする方法ってないですかね…。これができれば不具合の多いQt版Gecko使わなくて済むんですが。
FreePascalの2.4.0-RC1が出て、いったいFPC界隈はどうなっているのかなと思っていたら、つい先日に”Status of Gecko SDK Port“なるtopicがLazarusのフォーラムに立っていた。どうやらMac OS Xで動かしたいらしい。
UIが悲惨。ページのレンダリングは一見まともだが、日本語のレンダリングは壊滅。IMEも使えない。
IPA モナーフォントが入っている環境では、
failde to find a font. sadface Failed to find font entry for IPAMonaPGothic failde to find a font. sadface Failed to find font entry for IPAMonaPGothic
と言われて起動しない。なんとなくLANG=Cしたら行けた。あと、qcms.hが足りないといわれてビルドできなかったので、gfx/thebes/public/gfxPlatform.hを書き換える必要があった。
Qtは4.5.0、OSはUbuntu9.04(AMD64)。