ActiveX远程桌面连接HTML对象无法使用javascript正确显示

时间:2013-12-10 17:35:48

标签: javascript vbscript activex remote-desktop rdp

我有一个使用旧的MS远程桌面ActiveX对象连接到我们的服务器的Web应用程序。

最初,代码是在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而且只能&不会/赢得& #39; t升级。所以我在标题中添加以下行来模拟旧版本:

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

我发现它在IE 7或8中不起作用(但在9,10和11中工作正常)。在IE 7或8中运行时,我得到一个&#34;未知异常&#34;在这个例程中(在指示的行上):

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

任何线索为什么IE 7和8会因此而窒息?

1 个答案:

答案 0 :(得分:0)

基于此thread,我认为这是一个COM +桥接问题,无法通过JavaScript访问AdvancedSettings2。