このページはNetscape
Navigator 2.0以降及びMicrosoft Internet Explorer 3.0以降で正常に見られます。
Solly,Japanese only
Netscape プラグインの作成法(概要)
Netscapeプラグインは、Netscape Navigatorを拡張するバイナリです。
Navigatorは、データタイプ(MIME)に応じた、プラグインを呼び出し、Navigatorのサポートしていないデータを扱うことができるようになります。
Netscapeプラグインを作成するためには、先ずNetscape社ホームページよりプラグインガイドとSDK(Software
Development Kit=ソフトウェア開発キット)をダウンロードする必要があります。
【注意】
-
入門的な内容しか扱いませんので、詳細はプラグインガイドを参照して下さい。
-
プラグインは、Windows,MAC,UNIX用に開発することができますが、ここではWindowsプラットフォームでの動作のみ解説します。
※プラグインガイドには全てのプラットフォームについて記述されています。
-
十分なWindows API及びC言語(VC++)の知識を持っていることを前提としています。
-
現バージョンのSDKは、Communicator用のv4.0です。旧バージョンSDK(v3.0)はもはや入手することはできませんが、v4.0の追加機能を使用しなければ、Netscape
Navigator ver3.0用のプラグインも開発することができます。
-
追加仕様としては、Javaと協調した動作やWindow less等がありますが、ここでは解説を行いません。
プラグインの働き
プラグインは、NavigatorのAPIを使って、以下の操作を行います。
-
一つ又は複数のMIMEタイプを登録する
-
Navigatorのウィンドウの一部に描画する
-
キーボードやマウスのイベントを取得する
-
URLを使用してネットワークからデータを取得する
-
URLにデータをポスト(書込み)する
-
新しいURLへのリンクへのハイパーリンクかホットスポットを追加する
-
HTMLページ上のセクションに描画する
あなたが使用しているNavigator上でヘルプメニューに行き、「プラグインについて」をクリックすると、インストールされているプラグインの一覧が表示されます。このとき、対応するデータのMIMEタイプとファイル拡張子が一緒に表示されます。
Navigator側の動作(概要)
Navigatorは、プラグインディレクトリをチェックしプラグインモジュールを探します。
Webページをオープンしたとき、メディアタイプのデータがはめ込まれていたとき、プラグインを呼び出します。
そのときのシーケンスは以下のようになります。
-
該当するMIMEタイプのプラグインがあるかチェックする。
-
メモリーにプラグインコードを読み込む
-
プラグインを初期化する
-
プラグインの新しいインスタンス(データのようなもの)を生成する
Navigatorは、同じページや別のページに拘わらず、同じプラグインで複数のインスタンスを扱うことができます。
詳細な動作は次章で説明します。
動作(詳細)
プラグインは一つ又は複数のMIMEタイプに関連づけられた、動的コードモジュールです(ここでいう”動的(dynamic)”は、Navigatorの起動後にモジュールの読込み、解放ができることを指します。いわゆるDLLです)。
MIMEタイプはWindowsの場合、プラグインのリソース(VBで言えば、form?)に記述します。
以下にプラグインのロード(読込み)からアンロード(解放)までの一生を示します。
-
NavigatorがHTML文章を解釈中に登録されているプラグインのMIMEタイプのデータに出会うと(これはEMBEDと別ファイルの両タイプとも共通)、対応するプラグインモジュールを読込みます(既に読み込まれている場合は除く)。そしてインスタンスを生成します。
この後、プラグインのAPI NPP_Initializeを呼び出します。
-
Navigatorは、インスタンスを作成するときにプラグインのAPI NPP_Newを呼び出します。複数のインスタンスを生成するときはこの関数が複数回呼び出されます。
-
インスタンスを表示しているページを離れるときに、Navigatorはインスタンスを破棄します。これに先立ってNPP_Destroyを呼び出します。
-
そして、最後のインスタンスが破棄された後、プラグインをメモリからアンロードします。これに先だってNPP_Shutdownを呼び出します。
プラグインの書式
Navigatorやプラグインの書式は以下のように決定されています(ポーランド記号のようなものですね)
。
-
プラグインメソッド、(プラグイン内の関数)は、NPP_ではじまる。例:NPP_New
-
Netscapeメソッド、(NetscapeのAPI)は、NPN_ではじまる。例:NPN_Write
-
データ構造体は、NPではじまる。例:NPWindow
-
モジュールの書式
ディスプレイモード
プラグインの表示方法の種類(ディスプレイモード)には以下の3種類があります。
-
embed(はめ込み)の表示
-
embedの隠し
-
フルページ
「embed(はめ込み)の表示」は、HTML文章の一部の指定された資格内に表示されます。マクロメディア社のShowckWaveプラグインがこれに当たります。これは、HTML文書内に<EMBRED>タグで表記します。そしてデータはSRC属性で指定し、サイズはHEIGHTとWIDTHで表します。
【例】
<EMBED SRC="newave.avi" WIDTH=320 HEIGHT=200
AUTSTART=true LOOP=true>
「embedの隠し」は、HIDDEN属性を追加します。
【例】
<EMBED SRC="audiplay.aiff" TYPE="audio/x-aiff" HIDDEN>
「フルページ」は、HTMLではなく、直接データを指定します。Adobe社のAcrobat
Readerがこれにあたります。
プラグイン開発の流れ
-
開発するプラグインに必要な機能のプランを立てる。
-
MIMEタイプとファイル拡張子を決定する。
-
SDKをダウンロードする
-
プラグインプロジェクトを作成する。これは、SDKのサンプルソースを元に作成するのが望ましい
-
テンプレートから必要な機能を盛り込んでいく
-
ビルトする
-
インストーラをつくる
-
テスト・デバックを行う。
プラグインの登録
Navigatorは、MIMEタイプ又はファイル拡張子から、対応するプラグインをロードします。
HTMLファイルでは、EMBEDタグのTYPE属性でMIME属性を指定します。
【例】
<EMBED SRC="audiplay.aiff" TYPE="audio/x-aiff">
このMIMEタイプはメジャータイプ(applicationやimage等)とマイナータイプから構成されます(image/jpeg等)。
MIMEタイプはRFC 1521"MIME:Mechanisms for Specifying and Describing
the Forms of Internet Message Bodies"とRFC 1590"Media Type Registration
Procedure"で規定されています。もし、あなたが新しいMIMEタイプを定義したい場合は、IETF(Internet
Engineering Task Force)に登録する必要があり、登録されるまでは、"x-"を頭に付けます。たとえば、"image/x-nwin"等です。
Windowsでは、プラグインはNavigatorアプリケーションと同じディレクトリに格納します。そして「プラグインの書式」で述べたように、ファイルネームは、8.3文字,NPではじまる,拡張子はDLLである必要があります。
また、プラグインのMIMEタイプは、リソース(*.rcファイル)のバージョン情報に以下の2行を追加します。
※リソースエディタではこの2項目は追加できないので、テキストエディタで追加する必要があります。
-
"File Extends" ... ファイル拡張の記述
-
"MIME Types" ... MIMEタイプの記述
複数のMIMEタイプを指定したい場合は、"|"で区切ってMIME文字列を追加します。
【例】
video/quicktime|audio/aiff|image/jpeg
※詳しくはSDKのサンプルを参照して下さい。
尚、バージョン情報には必ずLanguage項目があることを確認して下さい。
プラグインによる描画とメモリのハンドリング
プラグインは描画前に、描画のための情報を設定し、更に再描画などのイベントのハンドルを行わなければなりません。
その為、Navigatorは以下のプラグインメソッドを呼び出します。
-
NPP_GetValue:プラグインの情報を取得するメッソッド
-
NPP_Print:インスタンスの印刷
-
NPP_SetValue:Navigatorの情報を 設定する
-
NPP_SetWindow :プラグインに描画するウィンドウをセット(WindowsのSetWindow
APIに相当)
-
NPP_HandleEvent :インスタンスのイベントハンドル
プラグインはNavigatorの情報取得及び設定の為にNetscapeメソッドを呼び出すことができます。
-
NPN_GetValue:Navigatorの情報を取得する
-
NPN_SetValue:Navigatorにプラグインの情報を設定
プラグインでメモリのアロケーションを行う場合、WindowsのAPIではなく、NavigatorのAPIを使用しなければなりません。
-
NPN_MemAllock:メモリのアロケーション
-
NPN_MemFree:NPN_MemAllockで確保したメモリを解放する
ストリームの送受信
ストリームは、URLから供給されるデータです。ストリームはプラグインのインスタンスと関連づけられますが、一つのインスタンスで複数のストリームを扱うことができます。ストリームはNavigatorによって作成されてプラグインインスタンスにより消費されるか、プラグインインスタンスにより作成されてNavigatorによって消費されます。いずれのストリームフォーマットも、関連づけられたMIMEタイプにより指定されます。
ストリームはNavigatorから自動的に生成されてプラグインに送られる場合とプラグインの要求により送られる場合があります。プラグインは以下の2つの転送モード(transmission
modes)から一つを選ぶことができます。
-
ノーマルモード:Navigatorにデータが届いたときに、そのままプラグインにシーケンシャルに送ります。
-
ランダムアクセスモード:プラグインによるストリームの任意のポイントへのジャンプ要求をサポートします。この場合、サーバも対応機能が必要になります。
-
ファイルモード:Navigatorは、データをローカルキャッシュにセーブし、そのファイルパスをプラグインに渡します。
プラグインで作られNavigatorへ渡されるストリームは、転送方向を除いて上記のノーマルモードに似ています。ノーマルモードでは、Navigatorはストリームがあるとプラグインを呼出して、それをプラグインへ通知し残りのデータを送ります。対照的にプラグインによって作られたストリームの場合、プラグインはストリームがあることをNavigatorを呼び出してデータを書き込み、その後データを破棄します。
プラグインのビルド
Win32の場合プラグインSDKは、VC++4.2用に作成されています。以下にサンプルのビルド方法を記述します。
-
まずSDK(WinNPSDK.zip)をダウンロードします
-
zipユーティリティを使用してWinNPSDK.zipを解凍します。もし、SDKを変更しない場合はルートディレクトリで、pkunzipを-dフラグで使用すれば\PluginSDKディレクトリ以下にSDKが作成されます。
-
\Program Files\Examples\Simple\Windows\NPSimple32.mdpをオープンしビルドします。
-
できたオブジェクトを、\Program Files\Netscape\Navigator\Program\Pluginsへコピーします。
-
Java classファイル(\PluginSDK\Examples\Simple\Simple.class)をプラグインと同じディレクトリにコピーします。
※このJava classファイルはJavaScriptへのインタフェースになります。
-
もし、Navigatorが起動中なら一旦終了させて下さい。
-
Navigatorを起動し、以下のファイルを読み込んで下さい
\PluginSDK\Examples\Simple\Testing\SimpleExsample.html
おわりに
実は、コレはプラグインガイドを拾い読みしてまとめたものなので、これを読んだだけでは、なにがなんだかわからないと思います。
次の実習で実際のプラグインを作成します。両方を読めば、ある程度感じがつかめるようになると思います。
[ホームへ戻る]
Copyright (c) 1997-1999, BearBeetle, Allrights reserved.