WebKit に基づく組み込みブラウザー用の NPAPI プラグインをプログラミングしています。このプラグインで処理されるオブジェクトの 1 つは、javascript プロパティを使用してサイズを変更したいビデオ フレームwidth
ですheight
。
そのため、プラグインの C++ 実装では、これら 2 つのプロパティ ( widthとheight ) を NPAPI NP_Class関数ポインター (私の場合はHasProperty / GetProperty / SetPropertyメソッドにマップ) を介して公開します。
さて、私を悩ませているのは、WebページのJavascriptが次のようなことをするときです:
<object id="video" type="video/myPluginMimeType" style="height:150px;"></object>
<script>
var video = $('video');
video.height = 250; // all happens here
</script>
それは私の C++ コードに入り、ビデオのサイズ変更を実行します (私の組み込みプラットフォームでは、ビデオ ドライバーに直接行きます)。しかし、その直後に、ブラウザから NPN_setWindow() 関数を介して呼び出され
、ビデオオブジェクトの元のサイズ (この例では高さ 150px) が返されます。
これNPP_setWindow
もビデオ ドライバーに直接マッピングされるため、瞬く間に 250px の高さのビデオしか表示されません。これはすべて、ブラウザが元の「スタイル」属性のみをカウントするためであると思われます。
だから、質問:
- NPAPIを使用して、ブラウザの幅/高さ (スタイルも?) プロパティを何らかの形で更新させることはできますか?
- NPP_setWindow 呼び出しを単に無視し、NPN_New() への最初の呼び出し (オブジェクトのスタイル プロパティを提供します) とそれに続く
video.height
NP API を介した呼び出しに基づいて、一意にサイズ変更を実行する必要がありますか?
私は最初のバージョンの方が好きだと思います。なぜなら、ブラウザがいつ再描画するかを決定できるからです。この方法で、ほとんどステートレスなビデオ プラグインを使用できます。
また、この最初のバージョンでは、プラグイン DOM オブジェクトの CSS プロパティを変更する機能が Web ページに提供されます。これは、NPP_setWindow 呼び出しによって自動的に反映されます。