NPAPI プラグインの作り方 for Windows その4
ずいぶん更新が止まってしまいましたが、NPAPI プラグインの作り方の続きです。
今回は、サンプルが動くようにしてみます。
なお、今回のサンプルは、GitHub のページからダウンロードできます。
サンプルの動作のさせ方
まず、前回作成したサンプルの NPAPI プラグインを動作させてみます。
ただし、もともとのサンプルのプラグインのバグが原因で、まだ正しく動作しません。
プラグインの登録
Firefox の場合
Firefox の場合は、インストールされたディレクトリ (C:\Program Files\Mozilla Firefox
など) の下に plugins
というディレクトリがあるので、その下に作成した DLL をコピーします。
これで、次回以降の起動でプラグインが動作するようになります。
Google Chrome の場合
Google Chrome の場合は、拡張機能を作成するのが簡単だと思います。
Google Chrome の拡張機能の作り方は、Chrome Extensions API リファレンスなどを参照してください。
バックグラウンドページのみを持つような拡張機能を作成し、以下のような plugins
属性を持った manifest ファイルを作成します。
public
を true
にしておくと、プラグインをどのページからでも参照できるようになります。
ただし、これはセキュリティホールになることが多いので、テスト環境のみにした方が無難だと思います。
「ツール」-「拡張機能」を開き、デベロッパーモードにチェックを入れた上で「パッケージ化されていない拡張を読み込む...」で読み込むと、プラグインを使えるようになります。
テスト用 HTML の用意
前回の Firefox の公式ページのサンプル npruntime には、テスト用のファイル test.html
が含まれていますので、これをブラウザで開きます。
画面の下の方にはいくつかボタンが並んでいると思いますが、これらを押すと、本来ならメッセージがポップアップ表示されるはずです。
しかし、ページ読み込み時かボタンクリック時に、ブラウザが「プラグインがクラッシュした」というようなメッセージを出してくると思います。
そうならない場合は、プラグインが正しく読み込まれていない可能性が高いので、手順を確認してください。
なお、test.html
内には二つの embed
タグがありますが、今回作成したサンプルは、一つ目の embed
タグに対して読み込まれます。
二つ目の embed
タグに関しては「対応するプラグインが見つかりません。」のように表示されたままですが、今回は特に対応したりはしないことにします。
GitHub に用意しておいた test.html
から、二つ目の embed
タグは削除してあります。
サンプルの修正
ブラウザがクラッシュしないように修正します。
修正するのは plugin.cpp
内の3箇所です。
GibHub の diff が見易いのでこちらを参照した方がよいかもしれません。
- 452行目付近の
_strdup
-
以下のように、
*result
に_strdup
の結果を代入するのではなく、NPN_MemAlloc
でメモリを確保した上で*result
に代入してやります。 - 466行目付近
- こちらも、まったく同様に
_strdup
によるコピーを修正します。 - 540行目付近
-
以下のように、
NPN_Evaluate
の最後の引数に変数を渡してやり、戻り値を受け取れるようにします。
この値は不要なので、忘れずNPN_ReleaseVariantValue
で解放してやります。
この状態でコンパイルしなおし、DLL をコピーした上で、もう一度サンプルの test.html
を閲覧すると、クラッシュせずに動作することが確認できると思います。
次回は、このサンプルにディスクサイズを取得するメソッドを追加し、もう少しサンプルの動作を説明する予定です。
0 件のコメント:
コメントを投稿