2010-11-18 14 views
1

現在、クロームにはプロセス外のプラグインがあります。 firefox 4は同じモデルを使用します。Mac OSX、NPAPI、NSView、Out of processプラグインのCocoaイベントモデル

これは、プラグインプロセスがブラウザプロセスから分離されたことを意味します。 プラグインプロセスにウィンドウがない可能性があります。

私のプラグインはNSViewに基づいています。

ブラウザのプロセスでNSWindowにアクセスできるようになる前に、my_viewをウィンドウ内のcontentViewのサブビューとして追加するだけです。

[[the_window contentView] addSubview:my_view] 

私はイベントを自分で処理する必要はありません。それ自体は機能しました。

しかし今、イベント処理コードでNPCocoaEventsNSEventsに変換しました。

自分で変更する必要がありますか?

NSEventsの場合もありますが、ホイールマウスイベントなどのようにはできません。

どうすればよいですか?

私は間違った方法でアプローチしましたか?

私に教えてください。

答えて

2

自分で変更する必要がありますか?

NSEventsを既存のNSViewに転送する方法を使用する場合は、yesを選択します。元のNSEventsにアクセスする方法はありません。プラグインのプロセスには存在しません。

もう1つの方法は、ネイティブコントロールの使用をやめ、独自の描画とイベント処理を行うことです。これは、ほとんどのNPAPIプラグインが動作する方法です。

第三の可能性は、あなたのプラグインコンテンツのための別のウィンドウを開き、そのウィンドウでビューを置くことであろう。これはNPAPIによって技術的にサポートされているわけではありませんが、完璧ではありませんが、長期的なオプションを探求している間は、プラグインが動作する短期間の方法かもしれません。

私は間違った方法でアプローチしましたか?

はい、以前はNPAPIの使用方法がサポートされていなかったハックはサポートされていませんでした。ブラウザのウィンドウにビューを追加すると、実装の詳細であるブラウザのビュー階層に関することが想定され、いつでも変更される可能性があります。

+0

あなたの答えをありがとう。 大きなアドバイスです。 –

1

プラグインを作成するには、FireBreathフレームワークを使用することをお勧めします。イベントおよび描画モデルのネゴシエーションとイベント抽象化の抽象化が既に多くあります。起き上がるのはかなり簡単です。