1

WebKit に基づく組み込みブラウザー用の NPAPI プラグインをプログラミングしています。このプラグインで処理されるオブジェクトの 1 つは、javascript プロパティを使用してサイズを変更したいビデオ フレームwidthですheight

そのため、プラグインの C++ 実装では、これら 2 つのプロパティ ( widthheight ) を 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.heightNP API を介した呼び出しに基づいて、一意にサイズ変更を実行する必要がありますか?

私は最初のバージョンの方が好きだと思います。なぜなら、ブラウザがいつ再描画するかを決定できるからです。この方法で、ほとんどステートレスなビデオ プラグインを使用できます。
また、この最初のバージョンでは、プラグイン DOM オブジェクトの CSS プロパティを変更する機能が Web ページに提供されます。これは、NPP_setWindow 呼び出しによって自動的に反映されます。

4

2 に答える 2

2

<object>sは他のHTML要素と同じです。element.style.widthとで幅と高さを変更できますelement.style.height。寸法が変更されるとすぐにNPP_SetWindow呼び出しを受け取る必要があるため、設定可能な独自の幅と高さのプロパティを手動でロールする必要はありません。

于 2012-03-22T21:38:34.307 に答える
1

わかりました、解決策を見つけたので、これを他の人のためにここに残します:

  1. object.style.width = 150;長さの値を使用する代わりに、aboslut 値 ( ) で幅を設定します (ここで説明されているように: http://www.w3.org/TR/css3-values/ )。正しい JavaScript コードは次のようにする必要があります。object.style.width = 150 + "px"; // or "150px" directly

  2. 全体として、私の本当の問題は、プラグイン C++ コードからオブジェクトの CSS プロパティに影響を与える方法を知らなかったことです。ここで解決策を見つけました: NPN_GetValue( my object ) / NPN_GetProperty( my object の "style") / NPN_SetProperty( style プロパティの "width") を使用してそれを行う必要があります。

于 2012-03-23T11:53:26.980 に答える