KB: 動態建構ActiveX元件

This article is only available in Chinese currently.

概述

本篇教導如何解決Internet Explorer動態建構ActiveX元件所生之潛在問題。

詳述

若您試圖動態建構GvLiveX元件,您可能採以下步驟為例:

<html> 
<head> 
<script type="text/javascript"> 
function CreatObj()
{
   var strHost = "192.168.0.99";
   var strCameraCH = "ch1";
   var objimageheight = 240;
   var objimagewidth = 320; 
   var videoobj = document.getElementById("box");
   videoobj.innerHTML=""; 
   var objhtml="";
   objhtml="<OBJECT ID='Player1' CLASSID='CLSID:bf863957-f6a7-4a3b-bd23-523b1fc47d35' CODEBASE='./GvLiveX.cab#Version=1,0,0,464' width='"+objimagewidth+"' height='"+objimageheight+"'></OBJECT>" 
   videoobj.innerHTML="<center>"+objhtml+"</center>"; 
   var videoObj1 = document.getElementById("Player1");
   if (videoObj1)
   {
       videoObj1.SetLanguage("Cht");
       videoObj1.OpenSimpleConsole(strHost, 3557, "admin", "1234", strCameraCH, ":embed:resolve:")
   }
}
</script> 
</head> 
<body> 
<input type="button" value="Live" onclick="CreatObj();"> 
<div id="box"></div> 
</body> 
</html>

但很快地,您會發現這段程式碼無法正常運作,這是因為Internet Explorer處理out-of-process COM server所生之相容性問題(本公司元件採out-of-process COM server即EXE格式),有一簡單方式解決此問題,即為建構元件後設定一時間很短的timeout後再執行其他動作,修改範例如下(注意紅色部份):

<html> 
<head> 
<script type="text/javascript"> 
function CreatObj()
{
   var strHost = "192.168.0.99";
   var strCameraCH = "ch1";
   var objimageheight = 240;
   var objimagewidth = 320; 
   var videoobj = document.getElementById("box");
   videoobj.innerHTML=""; 
   var objhtml="";
   objhtml="<OBJECT ID='Player1' CLASSID='CLSID:bf863957-f6a7-4a3b-bd23-523b1fc47d35' CODEBASE='./GvLiveX.cab#Version=1,0,0,464' width='"+objimagewidth+"' height='"+objimageheight+"'></OBJECT>" 
   videoobj.innerHTML="<center>"+objhtml+"</center>"; 
   var videoObj1 = document.getElementById("Player1");
   if (videoObj1)
   {
       window.setTimeout(10, function(){
           videoObj1.SetLanguage("Cht");
           videoObj1.OpenSimpleConsole(strHost, 3557, "admin", "1234", strCameraCH, ":embed:resolve:")
       });
   }
}
</script> 
</head> 
<body> 
<input type="button" value="Live" onclick="CreatObj();"> 
<div id="box"></div> 
</body> 
</html>