2013-12-10 18 views
0

我有一個使用舊的MS遠程桌面ActiveX對象連接到我們的服務器的網絡應用程序。ActiveX遠程桌面連接使用javascript無法正確顯示HTML對象

最初,代碼是在VBScript中,因爲這是MS站點上給出的示例。但是,MS已經在IE 11中放棄了對VBScript的支持,所以我試圖將它改爲使用Javascript。在操作上,它的大部分工作。我可以連接到服務器。 但是,服務器的視圖在頁面中間顯示爲一個小方塊。正在設置控件的高度和寬度,看起來它們是正確的,因爲我可以在頁面上看到控件的大綱,並且大小符合我的要求。但是視圖本身非常小(這不會發生在頁面的VBScript版本中)。另外,現在我已經將代碼轉換爲javascript了,「斷開連接」事件似乎不會觸發。有沒有人能夠使用Javascript獲得這個組件的工作?是否有任何替代方案不需要在服務器或客戶端上安裝?

好的,對任何可能發生這種情況的人進行一點更新,以及另一個問題。我終於得到了這一切與下面的HTML和JS工作:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script src="./scripts/jquery-1.10.2.js" ></script> 
</head> 
<body> 
<script type="text/javascript" for="rdpClient" event="OnDisconnected(reason)"> 
    OnDisconnected(reason); 
</script> 

<script type="text/javascript"> 
    var pw; 

    function GetPassword() { 
     return $.ajax({ 
      url: "OpenNewRDP.aspx/GetPassword", 
      type: "POST", 
      contentType: "application/json;charset=utf-8", 
      dataType: "json", 
      data: '' 
     }); 
    } 

    GetPassword().done(function (data) { 
     pw = data.d; 
     var rdpClient = document.getElementById("rdpClient"); 
     rdpClient.AdvancedSettings2.ClearTextPassword = pw; 
    }); 

    function OnReadyStateChange() { 
     var rdpClient = document.getElementById("rdpClient"); 
     if (rdpClient != undefined) { 
      if ((rdpClient.readyState == 4) && (rdpClient.SecuredSettingsEnabled)) { 
       SetRdpDefaultSettings(); 
      } else { 
       rdpClient.Server = ""; 
       alert("Trusted Sites Error"); 
      } 
     } 
    } 

    function SetRdpDefaultSettings() { 
     var rdpClient = document.getElementById("rdpClient"); 
     var resHeight = screen.height; 
     var resWidth = screen.width; 
     rdpClient.DesktopHeight = resHeight - 100; 
     rdpClient.DesktopWidth = resWidth - 30; 
     rdpClient.height = resHeight - 100; 
     rdpClient.width = resWidth - 30; 
     rdpClient.UserName = "<%=UserName%>"; 
     //rdpClient.AdvancedSettings2.ClearTextPassword = pw; 
     if (rdpClient.SecuredSettingsEnabled) { 
      rdpClient.SecuredSettings.StartProgram = "<%=StartProgram%>"; 
      rdpClient.SecuredSettings.WorkDir = "c:\\"; 
     } else { 
      alert("Trusted Sites settings need to be updated."); 
     } 
    } 

    function OnDisconnected(disconnectCode) { 
     window.close(); 
    } 

</script> 

<object 
    id='rdpClient' 
    onreadystatechange="OnReadyStateChange()" 
    codeBase='/wpresources/downloads/msrdp.cab#version=5.2.3790.0' 
    classid='CLSID:7584c670-2274-4efb-b00b-d6aaba6d3850' 
    VIEWASTEXT> 
    <PARAM NAME='Server' VALUE='<%=ServerName%>'> 
    <PARAM NAME='StartConnected' VALUE='1'> 
</object> 

</body> 
</html> 

不過,我想,以確保這舊版本的IE仍然工作爲好,因爲我們有一大堆的客戶,由於某種原因的另一個仍在使用IE 7或8,並且不能/不會升級。所以我把下面的行頭,以模擬舊版本:

<meta http-equiv="X-UA-Compatible" content="IE=7"/> 

,我發現,它並沒有在IE 7或8的工作(但在9,10工作正常,和11)。當在IE 7或8上運行,我在這個程序得到一個「未知異常」(上線):

GetPassword().done(function (data) { 
    pw = data.d; 
    var rdpClient = document.getElementById("rdpClient"); 
    rdpClient.AdvancedSettings2.ClearTextPassword = pw; **// error occurs here** 
}); 

任何線索,爲什麼IE 7和8這嗆?

回答

0

基於此thread,我認爲這是一個COM +橋樑問題,AdvancedSettings2不能通過JavaScript訪問。