6

ブラウザのDOMに対してC++でプログラミングする場合、各エンジンには異なるインターフェイスのセットがあり、IEにはCOMベースの[MSHTML](http://msdn.microsoft.com/en-us/library/aa752279 (VS.85).aspxがあります。 )、MozillaにはXPCOMベースのGeckoDOMなどがあります。

主要なブラウザー(およびバージョン)用のアダプターを備えた一般的なAPIはありますか?


明確にするために、問題のアプリケーションはブラウザと相互作用するC ++で記述されたデスクトップアプリケーションです。現在、IEとMozillaをサポートするために別々のコードベースがあり、ロジックの重複を減らし、より少ない労力で新しいブラウザを追加できるようにしています。 。

具体的な例として、HTML要素のinnerHTMLプロパティを取得することができます。

// Firefox
nsAutoString html;
nsCOMPtr<nsIDOMNSHTMLElement> elem = do_QueryInterface(obj);
if (elem)
    elem->GetInnerHTML(html); 

// IE
CComBSTR html;
MSHTML::IHTMLElementPtr elem = obj;
if (elem) 
     elem->get_innerHTML(&html);
4

4 に答える 4

5

あなたの最善の策は、独自のインターフェースを定義し、さまざまなアダプターを作成することです。C++ コードがすべての DOM トラバース機能を採用するわけではない可能性が高いため、インターフェイスはトラバーサル関数のコンパクトなセットを定義するだけで済みます。

独自のインターフェイスを定義する利点として、単体テスト用のモック アダプターを簡単に作成できます。

于 2009-01-27T15:01:50.907 に答える
1

私は一度も見たことがありません。私のソフトウェアでは、単純に拡張機能を Firefox の JavaScript で記述し、Internet Explorer BHO を作成しました (まだ完成していません)。

于 2009-01-14T05:13:48.487 に答える
0

MoonlightはLGPLの下でリリースされており、ライセンスに問題がなければ、何か使えるものがあるかもしれません。

于 2009-01-29T22:09:06.950 に答える
-6

C++ でなければならない理由はありますか? jQueryが使えない?または、WebKit のhttp://webkit.org/blog/156/queryselector-and-queryselectorall/のようなものがうまくいくかもしれません..

于 2009-01-14T16:45:42.863 に答える