分享方式:


升級現有的 ActiveX 控制項

現有的ActiveX控件(先前稱為 OLE 控件)可以在因特網上使用,而不需修改。 不過,您可能想要修改控件以改善其效能。

重要

ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控件。 ActiveX 控制件的支援在較新版本的 Internet Explorer 中已被取代,而且新式瀏覽器不支援。 Microsoft 不再提供可 Web 存取的 ActiveX 元件。

在網頁上使用控件時,還有其他考慮。 .ocx 檔案和所有支援檔案都必須位於目標計算機上,或透過因特網下載。 這使得程式代碼大小和下載時間成為重要的考慮。 下載可以封裝在已簽署的 .cab 檔案中。 您可以將控件標示為安全的腳本,並標示為安全初始化。

本文討論下列主題:

您也可以新增優化,如 ActiveX 控制件:優化中所述。 Monikers 可用來以異步方式下載屬性和大型 BLOB,如因特網上的 ActiveX 控件中所述

用於下載的封裝程式代碼

如需此主題的詳細資訊,請參閱 封裝ActiveX控件

CODEBASE 標籤

ActiveX 控制件會使用 <OBJECT> 標籤內嵌在網頁中。 標記 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 Spindial 範例控件。

<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。 下列命令會建置封包檔案:

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf

參數 -s 6144 會在封包中保留空間以進行程式代碼簽署。

版本標籤

請注意,#Version使用 CAB 檔案指定的資訊會套用至標記之 CLASSID 參數<OBJECT>指定的控制件。

視指定的版本而定,您可以強制下載控制件。 如需標記的完整規格 OBJECT ,包括 CODEBASE 參數,請參閱W3C參考。

標記控件 保管庫 以進行腳本和初始化

網頁中使用的 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}取代 ),以將密鑰與下列類別識別碼產生關聯:

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}

授權問題

如果您想要在網頁上使用授權控件,您必須確認許可協定允許其在因特網上使用,併為其建立授權套件檔案 (LPK)。

如果執行 Internet Explorer 的電腦未獲授權使用控件,則授權的 ActiveX 控制件將不會在 HTML 頁面中正確載入。 例如,如果使用 Visual C++ 建置授權控件,則使用控件的 HTML 頁面會在控件建置所在的電腦上正確載入,但除非包含授權資訊,否則不會在不同的電腦上載入。

若要在 Internet Explorer 中使用授權的 ActiveX 控制件,您必須檢查廠商的許可協定,以確認控件的授權允許:

  • 可轉散發

  • 在因特網上使用控件

  • 使用 Codebase 參數

若要在無授權機器的 HTML 頁面中使用授權控制件,您必須產生授權套件檔案 (LPK)。 LPK 檔案包含 HTML 頁面中授權控制件的運行時間授權。 此檔案是透過隨附於 ActiveX SDK 的 LPK_TOOL.EXE 產生。

建立 LPK 檔案

  1. 在授權使用控件的計算機上執行 LPK_TOOL.EXE。

  2. 在 [ 授權套件撰寫工具 ] 對話方塊的 [可用的控件 ] 清單框中,選取將在 HTML 頁面上使用的每個授權 ActiveX 控制件,然後按兩下 [ 新增]。

  3. 按兩下 [ 儲存並結束 ],然後輸入 LPK 檔案的名稱。 這會建立 LPK 檔案並關閉應用程式。

在 HTML 頁面上內嵌授權控制件

  1. 編輯您的 HTML 頁面。 在 HTML 頁面中,在任何其他 <OBJECT 標記之前,插入 <License Manager 物件的 OBJECT>> 標記。 License Manager 是隨 Internet Explorer 一起安裝的 ActiveX 控制件。 其類別標識碼如下所示。 將 License Manager 物件的 LPKPath 屬性設定為 LPK 檔案的路徑和名稱。 每個 HTML 頁面只能有一個 LPK 檔案。
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. 在 <License Manager 標籤後面插入授權控制件的 OBJECT> 標記。

    例如,顯示 Microsoft 遮罩編輯控制元件的 HTML 頁面如下所示。 第一個類別標識碼是授權管理員控件,第二個類別標識碼是遮罩的編輯控件。 變更標記以指向您稍早建立之 .lpk 檔案的相對路徑,並新增對象標記,包括控件的類別標識符。

  2. <如果使用 NCompass ActiveX 外掛程式,請插入 LPK 檔案的 EMBED> 屬性。

    如果您的控件可以在其他已啟用 Active 的瀏覽器上檢視,例如使用 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 Browser 保管庫 ty Levels and Control Behavior

數位簽名保證程式代碼自簽署后尚未變更。 程序代碼的哈希會擷取並內嵌在憑證中。 此哈希稍後會與下載程式代碼之後所擷取的程式代碼哈希進行比較,但在程式代碼執行之前。 Verisign 等公司可以提供簽署程式碼所需的私人和公鑰。 ActiveX SDK 隨附 MakeCert,這是用來建立測試憑證的公用程式。

管理調色盤

容器會決定調色盤,並將其作為環境屬性使用, DISPID_AMBIENT_PALETTE。 容器(例如 Internet Explorer)會選擇頁面上所有 ActiveX 控制件用來判斷自己調色盤的調色盤。 這可防止顯示閃爍,並呈現一致的外觀。

控件可以覆寫 OnAmbientPropertyChange 以處理調色盤變更的通知。

控件可以覆寫 OnGetColorSet 以傳回色彩集來繪製調色盤。 容器會使用傳回值來判斷控件是否為調色盤感知。

在 OCX 96 指導方針下,控件必須一律在背景中實現調色盤。

不使用環境調色盤屬性的舊版容器將會傳送WM_QUERYNEWPALETTE和WM_PALETTECHANGED訊息。 控件可以覆寫 OnQueryNewPaletteOnPaletteChanged 來處理這些訊息。

Internet Explorer Browser 保管庫 ty 層級和控制行為

瀏覽器具有安全性層級的選項,可由用戶設定。 因為網頁可能包含可能會危害用戶計算機的作用中內容,瀏覽器可讓用戶選取安全性層級的選項。 視瀏覽器實作安全性層級的方式而定,控制項可能完全無法下載,或會顯示憑證或警告訊息,以允許使用者在運行時間選擇是否要下載控制件。 Internet Explorer 的高、中、低安全性層級下 ActiveX 控件的行為如下所列。

高 保管庫模式

  • 將不會下載未簽署的控制件。

  • 如果不受信任,簽署的控件將會顯示憑證(使用者可以從現在起選擇一律信任此憑證擁有者的程式代碼的選項)。

  • 只有標示為安全的控件才會有持續性數據和/或可編寫腳本。

中等 保管庫 模式

  • 未簽署的控制件會在下載之前顯示警告。

  • 簽署的控件會在不受信任時顯示憑證。

  • 未標示為安全的控件會顯示警告。

低 保管庫 模式

  • 控件會下載而不發出警告。

  • 腳本和持續性會在沒有警告的情況下發生。

另請參閱

MFC 網際網路程式設計工作
MFC 網際網路程式設計基本概念
MFC ActiveX 控制項:授權 ActiveX 控制項