PRB: Web 頁上無法正常顯示 ActiveX 控件
<script type="text/javascript">function loadTOCNode(){}</script>文章編號 | : | 169438 |
最後修改 | : | 2006年10月24日 |
修訂 | : | 2.0 |
本頁
症狀
<script type="text/javascript">loadTOCNode(1, 'symptoms');</script>原因
<script type="text/javascript">loadTOCNode(1, 'cause');</script>• | 丟失 ActiveX 控件所使用的依賴 DLL。 |
• | 使用許可 ActiveX 控件時丟失 .lpk 文件。 |
• | ActiveX 控件包含需要得到運行時許可的其它許可控件。 |
• | ActiveX 控件的 <OBJECT> 標記中丟失 CODEBASE 屬性。 |
解決方案
<script type="text/javascript">loadTOCNode(1, 'resolution');</script>丟失 ActiveX 控件所使用的依賴 DLL
<script type="text/javascript">loadTOCNode(2, 'resolution');</script>對於用 MFC 寫成的 C++ 控件,一定要在 .inf 文件中指定正確版本的 MFC DLL,以便與控件一起打包。
有關其它信息,請參見 Microsoft Knowledge Base 中的下列文章:
對於 Visual Basic 控件,應確保將正確版本的 VB 運行時 DLL 與控件一起打包。 例如,典型的 Visual Basic 5.0 控件要求兩個 .cab 文件與其一同打包: Asycfilt.cab 和 Msvbvm50.cab。 對於正確打包這兩個 DLL 文件的 VB5 控件(在本例中爲 Simple.ocx)來說,其 .inf 文件有以下幾項涉及到 .cab 文件中所包裝的這兩個 DLL:
:
:
[Add.Code]
SIMPLE.OCX=SIMPLE.OCX
ASYCFILT.DLL=ASYCFILT.DLL
MSVBVM50.DLL=MSVBVM50.DLL
:
[ASYCFILT.DLL]
hook=AsycFilt.cab_Installer
FileVersion=2,20,4056,1
[AsycFilt.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb5/AsycFilt.cab
InfFile=AsycFilt.inf
[MSVBVM50.DLL]
hook=MSVBVM50.cab_Installer
FileVersion=5,0,37,24
[MSVBVM50.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb5/MSVBVM50.cab
InfFile=MSVBVM50.inf
某些情況下,客戶端計算機中可能已正確註冊了需要的依賴 DLL,但它不在註冊表所指定的目錄中。這有可能是用戶無意中移動了 DLL 的位置或從計算機中刪除該文件後,忘記了相應地更新註冊表項。 解決這個問題最簡便的方法是:運行註冊表編輯器 (Regedit.exe),然後搜索相關 DLL 名稱,以確定丟失的相關 DLL 的預期位置。 如果該目錄中已經不存在該文件,則應手動將 DLL 複製到該位置。 然後,重新啓動 Internet Explorer,轉到含有 ActiveX 控件的頁面,看它能否正確顯示。
警告: “註冊表編輯器”使用不當將導致嚴重的系統問題,可能需要重新安裝 Windows 才能解決問題。 Microsoft 無法保證任何因使用"註冊表編輯器"而造成的問題都能得到解決。 因此,使用本工具需要您自擔風險。
使用許可 ActiveX 控件時丟失 .lpk 文件
<script type="text/javascript">loadTOCNode(2, 'resolution');</script>此問題的常見症狀是,在開發計算機上 ActiveX 控件可以正常顯示,而在其它計算機上則不能。
爲了在一臺未經許可的計算機上的 HTML 頁面中使用許可控件,您必須首先生成一個授權包文件 (.lpk),然後在實際 ActiveX 控件的 <OBJECT> 標記之前,爲許可管理器對象插入另一個 <OBJECT> 標記。
有關其它信息,請參見 Microsoft Knowledge Base 中的下列文章:
ActiveX 控件包含需要得到運行時授權的其它授權控件
<script type="text/javascript">loadTOCNode(2, 'resolution');</script>例如,含有 Visual Basic 4.0 版 Mscomm32.ocx 的 ActiveX 控件即是一個授權控件。 在任何安裝了 Visual Basic 或 Visual C++ 的機器上,該 ActiveX 控件都能正常顯示,因爲在安裝 VB 和 VC++ 時,VB 和 VC++ 已自動爲這些控件提供了運行時授權。
要解決這一問題,請找到同一控件的非授權版本,或其它具有相同功能的第三方控件。 在授權 Mscomm32.ocx 的例子中,隨 Visual Basic 5.0 一起分發的 Mscomm32.ocx 版本未經授權,可以使用。 該控件可直接從以下地址下載: http://activex.microsoft.com/controls/vb5/mscomm32.cab (http://activex.microsoft.com/controls/vb5/mscomm32.cab) .
ActiveX 控件的 <OBJECT> 標記中丟失 CODEBASE 屬性
<script type="text/javascript">loadTOCNode(2, 'resolution');</script>在未安裝 ActiveX 控件的機器上,如果控件 <OBJECT> 標記中沒有指定 CODEBASE,將不能下載該控件,因而也不能顯示。
因此,一定要在控件的 <OBJECT> 標記中指定 CODEBASE 屬性,並指向正確的控件下載位置。
例如,如果您在 HTML 頁面中插入一個 HTML 佈局控件,一定要在 Object 標記中爲 HTML 佈局控件設置 Codebase 屬性,如下所示:
<OBJECT CLASSID="CLSID:812AE312-8B8E-11CF-93C8-00AA00C08FDF"
ID="Layout1_alx" STYLE="LEFT:0;TOP:0"
CODEBASE="http://activex.microsoft.com/controls/
MSpert10.cab#Version=1,0,5,1">
<PARAM NAME="ALXPATH" REF VALUE="Layout1.alx">
</OBJECT>