既存の ActiveX コントロール (以前の OLE コントロール) は、インターネット上で変更せずに使用できます。 ただし、パフォーマンスを向上させるためにコントロールを変更することもできます。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に代わる最新のテクノロジの詳細については、「 ActiveX コントロール」を参照してください。 ActiveX コントロールのサポートは、新しいバージョンの Internet Explorer では非推奨となり、最新のブラウザーではサポートされていません。 Microsoft は、Web アクセス可能な ActiveX コンポーネントを提供しなくなりました。
Web ページでコントロールを使用する場合は、追加の考慮事項があります。 .ocx ファイルとすべての関連ファイルは、ターゲット コンピューター上にあるか、インターネット経由でダウンロードする必要があります。 これにより、コードサイズとダウンロード時間が重要な考慮事項になります。 ダウンロードは、署名された .cab ファイルにパッケージ化できます。 コントロールは、スクリプトを実行しても安全で、初期化しても安全としてマークできます。
この記事では、次のトピックについて説明します。
「ActiveX コントロール: 最適化」の説明に従って、最適化を追加することもできます。 モニカーは、 インターネット上の ActiveX コントロールの説明に従って、プロパティと大きな BLOB を非同期的にダウンロードするために使用できます。
ダウンロード用のコードのパッケージ化
このテーマの詳細については、「 ActiveX コントロールのパッケージ化」を参照してください。
CODEBASE タグ
ActiveX コントロールは、 <OBJECT>
タグを使用して Web ページに埋め込まれます。
CODEBASE
タグの <OBJECT>
パラメーターは、コントロールのダウンロード元の場所を指定します。
CODEBASE
は、さまざまな種類のファイルを正常にポイントできます。
OCX ファイルでの CODEBASE タグの使用
CODEBASE="http://example.contoso.com/mycontrol.ocx#version=4,
70,
0,
1086"
このソリューションでは、コントロールの .ocx ファイルのみがダウンロードされ、サポートされている DLL がクライアント コンピューターに既にインストールされている必要があります。 これは、Visual C++ でビルドされた Internet Explorer コントロールと MFC ActiveX コントロールで機能します。Internet Explorer には Visual C++ コントロールのサポート DLL が付属しているためです。 ActiveX コントロール対応の別のインターネット ブラウザーを使用してこのコントロールを表示する場合、このソリューションは機能しません。
INF ファイルでの CODEBASE タグの使用
CODEBASE="http://example.contoso.com/trustme.inf"
.inf ファイルは、.ocx とその関連ファイルのインストールを制御します。 .inf ファイルに署名できないため、このメソッドは推奨されません (コード署名のポインターについては 、「コードの署名 」を参照してください)。
CAB ファイルでの CODEBASE タグの使用
CODEBASE="http://example.contoso.com/acontrol.cab#version=1,
2,
0,
0"
MFC を使用する ActiveX コントロールをパッケージ化するには、キャビネット ファイルを使用することをお勧めします。 MFC ActiveX コントロールをキャビネット ファイルにパッケージ化すると、.inf ファイルを含め、ActiveX コントロールと依存する DLL (MFC DLL など) のインストールを制御できます。 CAB ファイルを使用すると、コードが自動的に圧縮され、ダウンロードが迅速になります。 コンポーネントのダウンロードに .cab ファイルを使用している場合は、個々のコンポーネントよりも .cab ファイル全体に署名する方が高速です。
CAB ファイルの作成
キャビネット ファイルを作成するためのツールが Windows SDK の一部になりました。
CODEBASE
が指すキャビネット ファイルには、ActiveX コントロール用の .ocx ファイルと、そのインストールを制御するための .inf ファイルが含まれている必要があります。 キャビネット ファイルを作成するには、コントロール ファイルの名前と .inf ファイルを指定します。 システムに既に存在する可能性がある依存 DLL は、このキャビネット ファイルに含めないでください。 たとえば、MFC DLL は別のキャビネット ファイルにパッケージ化され、制御する .inf ファイルによって参照されます。
CAB ファイルを作成する方法の詳細については、「 CAB ファイルの作成」を参照してください。
INF ファイル
次の例の spindial.inf では、MFC Spindial コントロールに必要なサポート ファイルとバージョン情報が一覧表示されます。 mfc42.cab は Microsoft によって提供および署名されます。
Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://example.contoso.com/controls/vc/mfc42.cab
[Olepro32.dll] - FileVersion=5,
0,
4261,
0
[Mfc42.dll] - FileVersion=6,
0,
8168,
0
[Msvcrt.dll] - FileVersion=6,
0,
8168,
0
<OBJECT> タグ
次の例は、 <OBJECT>
タグを使用して MFC スピンダイヤル サンプル コントロールをパッケージ化する方法を示しています。
<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
CODEBASE="http://example.contoso.com/spindial.cab#Version=1,0,0,001">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>
この場合、spindial.cab には spindial.ocx と spindial.inf という 2 つのファイルが含まれます。 次のコマンドを実行すると、キャビネット ファイルがビルドされます。
C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf
-s 6144
パラメーターは、コード署名用にキャビネット内の領域を予約します。
バージョン タグ
CAB ファイルで指定された#Version
情報は、 タグの <OBJECT>
パラメーターで指定されたコントロールに適用されることに注意してください。
指定したバージョンに応じて、コントロールを強制的にダウンロードできます。
OBJECT
パラメーターを含む タグの完全な仕様については、W3C リファレンスを参照してください。
スクリプトと初期化に対してコントロールを安全にマークする
Web ページで使用される ActiveX コントロールは、スクリプトを作成しても安全であり、実際に安全な場合は初期化しても安全であるとマークする必要があります。 安全なコントロールは、ディスク IO を実行したり、コンピューターのメモリやレジスタに直接アクセスしたりしません。
コントロールは、スクリプト作成に安全で、レジストリを介して初期化しても安全であるとマークできます。
DllRegisterServer
を変更して、次のようなエントリを追加して、コントロールをレジストリ内のスクリプトと永続化に対して安全としてマークします。 別の方法として、 IObjectSafety
を実装します。
GUID (グローバル一意識別子) を定義して、スクリプト作成と永続化に安全なコントロールをマークします。 安全にスクリプト化できるコントロールには、次のようなレジストリ エントリが含まれます。
HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
永続的なデータから安全に初期化できるコントロールは、次のようなレジストリ エントリを使用して永続化しても安全であるとマークされます。
HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}
次のようなエントリ ( {06889605-B8D0-101A-91F1-00608CEAD5B3}
の代わりにコントロールのクラス ID を置き換える) を追加して、キーを次のクラス ID に関連付けます。
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}
ライセンスに関する問題
Web ページでライセンスされたコントロールを使用する場合は、ライセンス契約でインターネットでの使用が許可されていることを確認し、そのライセンス パッケージ ファイル (LPK) を作成する必要があります。
Internet Explorer を実行しているコンピューターにコントロールを使用するライセンスがない場合、ライセンスが付与された ActiveX コントロールが HTML ページに正しく読み込まれません。 たとえば、ライセンスされたコントロールが Visual C++ を使用してビルドされた場合、コントロールを使用する HTML ページは、コントロールがビルドされたコンピューターに正しく読み込まれますが、ライセンス情報が含まれていない限り、別のコンピューターには読み込まれません。
Internet Explorer でライセンスされた ActiveX コントロールを使用するには、ベンダーのライセンス契約を確認して、コントロールのライセンスで許可されていることを確認する必要があります。
再配布
インターネット上でのコントロールの使用
Codebase パラメーターの使用
ライセンスのないコンピューター上の HTML ページでライセンスされたコントロールを使用するには、ライセンス パッケージ ファイル (LPK) を生成する必要があります。 LPK ファイルには、HTML ページのライセンスされたコントロールのランタイム ライセンスが含まれています。 このファイルは、ActiveX SDK に付属LPK_TOOL.EXEを介して生成されます。
LPK ファイルを作成するには
コントロールを使用するライセンスが付与されているコンピューターでLPK_TOOL.EXEを実行します。
[ ライセンス パッケージ作成ツール ] ダイアログ ボックスの [ 使用可能なコントロール ] ボックスの一覧で、HTML ページで使用するライセンスが付与された各 ActiveX コントロールを選択し、[ 追加] をクリックします。
[ 保存] をクリックして終了 し、LPK ファイルの名前を入力します。 これにより、LPK ファイルが作成され、アプリケーションが閉じます。
ライセンスされたコントロールを HTML ページに埋め込むには
- HTML ページを編集します。 HTML ページで、License Manager オブジェクトの <OBJECT> タグを他の <OBJECT> タグの前に挿入します。 ライセンス マネージャーは、Internet Explorer と共にインストールされる ActiveX コントロールです。 そのクラス ID を次に示します。 License Manager オブジェクトの LPKPath プロパティを LPK ファイルのパスと名前に設定します。 HTML ページあたり 1 つの LPK ファイルのみを持つことができます。
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
ライセンス マネージャー タグの後に、ライセンスコントロールの <OBJECT> タグを挿入します。
たとえば、Microsoft Masked Edit コントロールを表示する HTML ページを次に示します。 最初のクラス ID は License Manager コントロール用で、2 番目のクラス ID は Masked Edit コントロール用です。 前に作成した .lpk ファイルの相対パスを指すタグを変更し、コントロールのクラス ID を含むオブジェクト タグを追加します。
NCompass ActiveX プラグインを使用している場合は、LPK ファイルの <EMBED> 属性を挿入します。
コントロールが他のアクティブ対応ブラウザー (たとえば、NCompass ActiveX プラグインを使用した Netscape) で表示される場合は、次に示すように <EMBED> 構文を追加する必要があります。
<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="maskedit.lpk">
<EMBED SRC = "maskedit.LPK">
</OBJECT>
<OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC" WIDTH=100 HEIGHT=25>
</OBJECT>
コントロール ライセンスの詳細については、「 ActiveX コントロール: ActiveX コントロールのライセンス」を参照してください。
署名コード
コード署名は、コードのソースを識別し、コードが署名されてから変更されていないことを保証するように設計されています。 ブラウザーの安全性の設定によっては、コードがダウンロードされる前にユーザーに警告が表示される場合があります。 ユーザーは、特定の証明書の所有者または会社を信頼することを選択できます。その場合、信頼されたユーザーによって署名されたコードは警告なしでダウンロードされます。 改ざんを回避するために、コードはデジタル署名されています。
信頼の警告メッセージを表示せずにコントロールを自動的にダウンロードできるように、最終的なコードが署名されていることを確認します。 コードに署名する方法の詳細については、ActiveX SDK の Authenticode に関するドキュメントを参照し、「 CAB ファイルの署名」を参照してください。
信頼とブラウザーの安全性レベルの設定によっては、署名者または会社を識別する証明書が表示される場合があります。 安全性レベルが何もない場合、または署名されたコントロールの証明書所有者が信頼されている場合、証明書は表示されません。 コントロールがダウンロードされ、証明書が表示されるかどうかをブラウザーの安全性設定で決定する方法の詳細については、「 Internet Explorer ブラウザーの安全性レベルとコントロールの動作 」を参照してください。
デジタル署名では、署名されてからコードが変更されていないことが保証されます。 コードのハッシュが取得され、証明書に埋め込まれます。 このハッシュは、後でコードがダウンロードされた後、実行前に取得されたコードのハッシュと比較されます。 Verisign などの企業は、コードの署名に必要な秘密キーと公開キーを提供できます。 ActiveX SDK には、テスト証明書を作成するためのユーティリティである MakeCert が付属しています。
パレットの管理
コンテナーはパレットを決定し、アンビエント プロパティ ( DISPID_AMBIENT_PALETTE) として使用できるようにします。 コンテナー (Internet Explorer など) は、ページ上のすべての ActiveX コントロールが独自のパレットを決定するために使用するパレットを選択します。 これにより、表示のちらつきを防ぎ、一貫した外観を提供します。
コントロールは OnAmbientPropertyChange
をオーバーライドして、パレットへの変更の通知を処理できます。
コントロールは OnGetColorSet
をオーバーライドして、パレットを描画するカラー セットを返すことができます。 コンテナーでは、戻り値を使用して、コントロールがパレットに対応しているかどうかを判断します。
OCX 96ガイドラインでは、コントロールは常にバックグラウンドでそのパレットを実現する必要があります。
アンビエント パレット プロパティを使用しない古いコンテナーは、WM_QUERYNEWPALETTEおよびWM_PALETTECHANGEDメッセージを送信します。 コントロールは、これらのメッセージを処理するために OnQueryNewPalette
と OnPaletteChanged
をオーバーライドできます。
Internet Explorer ブラウザーの安全性レベルと制御動作
ブラウザーには、ユーザーが構成できる安全レベルのオプションがあります。 Web ページには、ユーザーのコンピューターに悪影響を及ぼす可能性があるアクティブなコンテンツが含まれている可能性があるため、ブラウザーではユーザーが安全レベルのオプションを選択できます。 ブラウザーが安全レベルを実装する方法によっては、コントロールがまったくダウンロードされない場合や、コントロールをダウンロードするかどうかを実行時にユーザーが選択できるように証明書または警告メッセージが表示される場合があります。 Internet Explorer の高、中、低の安全性レベルでの ActiveX コントロールの動作を次に示します。
高い安全モード
署名されていないコントロールはダウンロードされません。
信頼されていない場合は、署名されたコントロールに証明書が表示されます (ユーザーは、今後、この証明書所有者のコードを常に信頼するオプションを選択できます)。
安全としてマークされたコントロールのみが永続的なデータを持つか、スクリプト可能になります。
中安全モード
署名されていないコントロールは、ダウンロード前に警告を表示します。
信頼されていない場合は、署名されたコントロールに証明書が表示されます。
安全としてマークされていないコントロールには警告が表示されます。
低い安全モード
コントロールは警告なしでダウンロードされます。
スクリプトと永続化は警告なしで行われます。
こちらも参照ください
MFC インターネット プログラミング タスク
MFC インターネット プログラミングの基本
MFC ActiveX コントロール: ActiveX コントロールのライセンス