2015-03-13 45 views
-1

幾年來,我用一個VBScript程序,除其他外,打開一個Internet Explorer窗口提示我輸入用戶ID,密碼和其他幾個變量。然而,最近我的公司強迫所有人都使用IE11。儘管我不知道Javascript,但我決定嘗試通過將.vbs文件擴展名更改爲.js並逐個修復錯誤來轉換程序。我最終讓程序運行時沒有拋出錯誤,它實際上運行IE並顯示密碼框窗口,但是當我點擊「提交」按鈕時,它崩潰了。我希望那些真正瞭解Javascript的人可能會看看這個功能,並告訴我問題是什麼。我將程序剝離下來以運行該功能並顯示結果。預先感謝所有迴應的人。完成轉換密碼框功能,調用IE從VBScript到Javascript

var Version = "1.18"; 

var True = 1; 
var False = 0; 

var aryServers; 
var intI, intLen; 
var blnPwdBoxWait; 
var objWShell, objIE; 
var strLoginID, strPassword, setServer, strShell, strLocalUser; 

aryServers = Array("server1", "server2", "server3", "server4", "server5"); 

// ################### DEFAULT SERVER AND SHELL VALUES 
strServer = "server3"; // computer to which you will be connecting 
strShell = "sh";  // "sh" if sh, bash, etc. or "csh" if csh, tcsh, etc. 
// ################### 

objWShell = new ActiveXObject("WScript.shell"); 
strLocalUser = objWShell.ExpandEnvironmentStrings("%USERNAME%"); 

// Get user data 
strLoginID = ""; 
strPassword = ""; 
if (strPassword == "") { 
    strPassword = PasswordBox ("Password Box Demo, Version " + Version); 
    WScript.Sleep(500); 
} 

window.alert("strLoginID: " + strLoginID + ", strPassword: " + strPassword + 
    ", strServer: " + strServer + ", strShell: " + strShell); 

objWShell = Nothing; 
WScript.Quit; 
// ################## 
function PasswordBox(strIETitle) { 
    objIE = new ActiveXObject("InternetExplorer.Application"); 
    objIE.FullScreen = False; 
    objIE.AddressBar = False; 
    objIE.MenuBar = False; 
    objIE.StatusBar = False; 
    objIE.ToolBar = False; 
    objIE.RegisterAsDropTarget = False; 
    objIE.Navigate("about:blank"); 

    do { 
     WScript.Sleep(100); 
    } while (! objIE.ReadyState == 4); 

    if (strLoginID != "" && strPassword == "") { 
     objIE.document.parentWindow.resizeTo(400, 300 + 70); 
    } else { 
     objIE.document.parentWindow.resizeTo(400, 260 + 70); 
    } 
    objIE.document.parentWindow.moveTo(
     objIE.document.parentWindow.screen.width/2 - 200, 
     objIE.document.parentWindow.screen.height/2 - 200); 
    objIE.document.writeln("<html>"); 
    objIE.document.writeln("<head>"); 
    objIE.document.writeln("<title>" + strIETitle + "</title>"); 

    objIE.document.writeln("<style type='text/css'>"); 
    objIE.document.writeln("<!--"); 
    objIE.document.writeln(".fixed { font-family:courier new, monospace }"); 
    objIE.document.writeln("-->"); 
    objIE.document.writeln("</style>"); 

    objIE.document.writeln("</head>"); 
    objIE.document.writeln("<body bgcolor=Silver>"); 
    objIE.document.writeln("<center>"); 
    objIE.document.writeln("<form>"); 
    if (strPassword == "") { 
     if (strLoginID == "") { 
      strLoginID = strLocalUser; 
     } else { 
      objIE.document.writeln("<b><font color='#FF3399'>Please enter a password!</font></b><p>"); 
     } 
    } 
    objIE.document.writeln("<b>" + strIETitle + "</b><p>"); 
    objIE.document.writeln("<table>"); 
    objIE.document.writeln("<tr><td colspan=2 align=left>"); 
    objIE.document.writeln("Enter your username and password:<br>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Username&nbsp;"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("<input id='userid' size=20 class='fixed' " + 
     "value='" + strLoginID + "'>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Password&nbsp;"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("<input type='password' id='passwd' size=20 " + 
     "class='fixed'><p>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Remote host:"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shell type:"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("<select name='server'><br>"); 
    intLen = aryServers.length; 
    for (intI = 0; intI < intLen; intI++) { 
     if (strServer == aryServers[ intI ]) { 
      objIE.document.writeln("<option value='" + aryServers[ intI ] + 
       "' selected>" + aryServers[ intI ] + "<br>"); 
     } else { 
      objIE.document.writeln("<option value='" + aryServers[ intI ] + 
       "'>" + aryServers[ intI ] + "<br>"); 
     } 
    } 
    objIE.document.writeln("</select>"); 
    objIE.document.writeln("</td><td valign=top>"); 
    if (strShell == "sh") { 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' id='sh' checked> sh/bash/ksh<br>"); 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' id='csh'> csh/tcsh<br>"); 
    } else { 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' id='sh'> sh/bash/ksh<br>"); 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' id='csh' checked> csh/tcsh<br>"); 
    } 
    objIE.document.writeln("</td></tr>"); 
    objIE.document.writeln("</table>"); 
    objIE.document.writeln("<p>"); 
    objIE.document.writeln("<input type='submit' value='Submit' id='but0'>"); 
    objIE.document.writeln("</form>"); 
    objIE.document.writeln("</center>"); 
    objIE.document.writeln("</body>"); 
    objIE.document.writeln("</html>"); 
    objIE.document.parentWindow.document.body.scroll="no"; 
    objIE.document.parentWindow.document.body.style.borderStyle = "outset"; 
    objIE.document.parentWindow.document.body.style.borderWidth = "3px"; 
    objIE.document.getElementsByName("but0").onClick = PasswordBox_Submit; 
    objIE.document.getElementsByName("passwd").focus; 
    objIE.Visible = True; 

    objWShell.AppActivate(strIETitle); 

    blnPwdBoxWait = True; 
    try { 
     do { 
      WScript.Sleep(100); 
      if (objIE.Visible) { 
       blnPwdBoxWait = blnPwdBoxWait; 
      } 
     } while (blnPwdBoxWait); 
    } catch(err) { 
     blnPwdBoxWait = False; 
    } 
    strLoginID = objIE.document.GetElementsByName("userid").value; 
    strPassword = objIE.document.GetElementsByName("passwd").value; 
    strServer = objIE.document.GetElementsByName("server").Options(
     objIE.document.GetElementsByName("server").selectedIndex).text; 
    if (strServer == "") { 
     alert("ABORTING: Radio button 'server' not readable!"); 
    } 
    if (objIE.document.GetElementsByName("shell").sh.checked) { 
     strShell = "sh"; 
    } else if (objIE.document.GetElementsByName("shell").csh.checked) { 
     strShell = "csh"; 
    } else { 
     alert("ABORTING: Radio button 'shell' not readable!"); 
    } 
    objIE.Visible = False; 
    objIE.Quit; 
    objIE = Nothing; 
} 

function PasswordBox_Submit() { 
    me.document.parentWindow.event.returnValue = False; 
    blnPwdBoxWait = False; 
} 
+0

究竟你想用你的VBS/JS完成什麼?你在哪裏發送結果? – 2015-03-13 18:52:59

+0

你應該學習JavaScript。你做什麼都行不通。這是隨機編程。 – 2015-03-13 19:11:20

+0

該函數的目的是讓用戶在IE窗口中使用填充表單將值分配給四個文本變量(strLoginID,strPassword,strServer和strShell)。第一個設置了文本輸入字段,第二個設置了密碼字段,第三個設置了選擇字段,最後一個設置了無線電字段。這工作時,我可以與IE瀏覽器運行VBScript,而且我真的需要幫助。包含函數的程序使用這些值從我的Windows PC建立到Linux服務器(由strServer指定)的VNC會話,如果這有幫助的話。感謝您的迴應。 – Leslie 2015-03-16 15:56:11

回答

0

也許最簡單的解決方案是將元標記添加到頁面,以便強制IE以兼容模式運行,因此支持vbscript。在下面的代碼中有一條評論,說明你如何做到這一點。

但現在你已經轉換了一切,我可以理解想讓它在javascript中工作,特別是因爲在兼容模式下運行肯定是臨時修復,有一天將無法使用。

我只能通過一些改動就能使它工作。他們中的大多數正在修復各種方法的情況:

var Version = "1.18"; 

var True = 1; 
var False = 0; 

var aryServers; 
var intI, intLen; 
var blnPwdBoxWait; 
var objWShell, objIE; 
var strLoginID, strPassword, setServer, strShell, strLocalUser; 

aryServers = Array("server1", "server2", "server3", "server4", "server5"); 

// ################### DEFAULT SERVER AND SHELL VALUES 
strServer = "server3"; // computer to which you will be connecting 
strShell = "sh";  // "sh" if sh, bash, etc. or "csh" if csh, tcsh, etc. 
// ################### 

objWShell = new ActiveXObject("WScript.shell"); 
strLocalUser = objWShell.ExpandEnvironmentStrings("%USERNAME%"); 

// Get user data 
strLoginID = ""; 
strPassword = ""; 

//Maybe you meant for this to be a while loop? 
if (strPassword == "") { 
    strPassword = PasswordBox ("Password Box Demo, Version " + Version); 
    WScript.Sleep(500); 
} 

WScript.echo("strLoginID: " + strLoginID + ", strPassword: " + strPassword + 
    ", strServer: " + strServer + ", strShell: " + strShell); 

objWShell = null; 
WScript.Quit(); 
// ################## 
function PasswordBox(strIETitle) { 
    objIE = new ActiveXObject("InternetExplorer.Application"); 
    objIE.FullScreen = False; 
    objIE.AddressBar = False; 
    objIE.MenuBar = False; 
    objIE.StatusBar = False; 
    objIE.ToolBar = False; 
    objIE.RegisterAsDropTarget = False; 
    objIE.Navigate("about:blank"); 

    do { 
     WScript.Sleep(100); 
    } while (! objIE.ReadyState == 4); 

    if (strLoginID != "" && strPassword == "") { 
     objIE.document.parentWindow.resizeTo(400, 300 + 70); 
    } else { 
     objIE.document.parentWindow.resizeTo(400, 260 + 70); 
    } 
    objIE.document.parentWindow.moveTo(
     objIE.document.parentWindow.screen.width/2 - 200, 
     objIE.document.parentWindow.screen.height/2 - 200); 
    objIE.document.writeln("<html>"); 
    objIE.document.writeln("<head>"); 
    objIE.document.writeln("<title>" + strIETitle + "</title>"); 
    //Meta tag to force compatibility mode in IE. 
    //objIE.document.writeln("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE9\" />"); 

    objIE.document.writeln("<style type='text/css'>"); 
    objIE.document.writeln("<!--"); 
    objIE.document.writeln(".fixed { font-family:courier new, monospace }"); 
    objIE.document.writeln("-->"); 
    objIE.document.writeln("</style>"); 

    objIE.document.writeln("</head>"); 
    objIE.document.writeln("<body bgcolor=Silver>"); 
    objIE.document.writeln("<center>"); 
    objIE.document.writeln("<form>"); 
    if (strPassword == "") { 
     if (strLoginID == "") { 
      strLoginID = strLocalUser; 
     } else { 
      objIE.document.writeln("<b><font color='#FF3399'>Please enter a password!</font></b><p>"); 
     } 
    } 
    objIE.document.writeln("<b>" + strIETitle + "</b><p>"); 
    objIE.document.writeln("<table>"); 
    objIE.document.writeln("<tr><td colspan=2 align=left>"); 
    objIE.document.writeln("Enter your username and password:<br>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Username&nbsp;"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("<input id='userid' size=20 class='fixed' " + 
     "value='" + strLoginID + "'>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Password&nbsp;"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("<input type='password' id='passwd' size=20 class='fixed'><p>"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("Remote host:"); 
    objIE.document.writeln("</td><td>"); 
    objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shell type:"); 
    objIE.document.writeln("</td></tr><tr><td valign=top>"); 
    objIE.document.writeln("<select id='server'><br>"); 
    intLen = aryServers.length; 
    for (intI = 0; intI < intLen; intI++) { 
     if (strServer == aryServers[ intI ]) { 
      objIE.document.writeln("<option value='" + aryServers[ intI ] + 
       "' selected>" + aryServers[ intI ] + "<br>"); 
     } else { 
      objIE.document.writeln("<option value='" + aryServers[ intI ] + 
       "'>" + aryServers[ intI ] + "<br>"); 
     } 
    } 
    objIE.document.writeln("</select>"); 
    objIE.document.writeln("</td><td valign=top>"); 
    if (strShell == "sh") { 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' value='sh' checked> sh/bash/ksh<br>"); 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' value='csh'> csh/tcsh<br>"); 
    } else { 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' value='sh'> sh/bash/ksh<br>"); 
     objIE.document.writeln("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input " + 
      "type='radio' name='shell' value='csh' checked> csh/tcsh<br>"); 
    } 
    objIE.document.writeln("</td></tr>"); 
    objIE.document.writeln("</table>"); 
    objIE.document.writeln("<p>"); 
    objIE.document.writeln("<input type='button' value='Submit' id='but0' onclick=\"submitted.value='DONE';\">"); 
    objIE.document.writeln("<input type='hidden' id='submitted' value=''>"); 
    objIE.document.writeln("</form>"); 
    objIE.document.writeln("</center>"); 
    objIE.document.writeln("</body>"); 
    objIE.document.writeln("</html>"); 
    objIE.document.parentWindow.document.body.scroll="no"; 
    objIE.document.parentWindow.document.body.style.borderStyle = "outset"; 
    objIE.document.parentWindow.document.body.style.borderWidth = "3px"; 
    objIE.document.getElementById("passwd").focus(); 
    objIE.Visible = True; 

    objWShell.AppActivate(strIETitle); 

    blnPwdBoxWait = ''; 
    try { 
     do { 
      WScript.Sleep(100); 
      if (objIE.Visible) { 
       blnPwdBoxWait = objIE.document.getElementById("submitted").value; 
      } 
     } while (blnPwdBoxWait==''); 
    } catch(err) { 
     WScript.Echo('ERROR: ' + err.message); 
     blnPwdBoxWait == 'DONE'; 
    } 
    strLoginID = objIE.document.getElementById("userid").value; 
    strPassword = objIE.document.getElementById("passwd").value; 
    strServer = objIE.document.getElementById("server").options(objIE.document.getElementById("server").selectedIndex).text; 
    if (strServer == "") { 
     alert("ABORTING: Radio button 'server' not readable!"); 
    } 

    strShell = objIE.document.querySelector('input[name="shell"]:checked').value; 


    objIE.Visible = False; 
    objIE.Quit(); 
    objIE = null; 

    return strPassword; 
} 
+0

完美運作。謝謝! – Leslie 2015-03-23 16:27:37