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>