0

MacでSafari用のプラグインを作成しています。ビデオを表示できるブラウザのウィンドウの上にウィンドウを作成する方法に行き詰まっています。

以前はNPWindowNPP_SetWindow関数で受け取ったウィンドウ ポインターが null である Cocoa イベント モデルを使用していました。次に、Carbon Event モデルに切り替えNP_CGContext、NPWindow 構造体に存在するウィンドウ ポインターを介してポインターを取得しました。これを使用して、WindowRef へのポインターを取得し、次のように NSWindow へのポインターを取得しました。

NP_CGContext* npContext = (NP_CGContext*)npWindow->window;
WindowRef window = npContext->window;
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:window] autorelease];

ストリーミング エンジンは へのポインタを受け入れますNSWindow。ブラウザー空間にウィンドウを作成する方法がわかりません。

そのため、ウィンドウの作成に関するヘルプをいただければ幸いです。

4

1 に答える 1

1

ストリーミング エンジンは、NSWindow へのポインターを受け入れます。ブラウザー空間にウィンドウを作成する方法がわかりません。

前の 回答で説明したように、これを行うべきではありません。

NSWindow ポインターを必要とするストリーミング エンジンは、NPAPI プラグインの作成にはあまり適していません。フレームを CGContextRef に描画できる CALayer を取得または販売するもの、または失敗したものを可能な限り探す必要があります (ただし、これはプロセス外のプラグインでははるかに遅くなります)。

絶対に NSWindow を使用する必要がある場合は、ブラウザのウィンドウとはまったく関係のない新しいものをプラグイン プロセスで作成し、画面のどこかに表示する必要があります。ユーザー エクスペリエンスは、ウィンドウと共に移動しない、ブラウザー ウィンドウの背後にあるなどの理由で、比較的貧弱になります。これは、ブラウザー ベンダーによって明確に推奨されていません。しかし、NSWindow を使用する以外に選択肢がない場合は、最新のブラウザーではこれが唯一の選択肢です。

于 2015-10-31T15:52:06.360 に答える