完成将调用IE的密码框函数从VBScript转换为Javascript

Finish converting password box function that calls IE from VBScript to Javascript

本文关键字:函数 VBScript 转换 Javascript 密码 调用 IE      更新时间:2023-09-26

几年来,我使用 VBScript 程序打开一个 Internet Explorer 窗口,提示我输入用户 ID、密码和其他几个变量。 然而,最近,我的公司强迫所有人使用IE11。 尽管我不懂Javascript,但我决定尝试通过将文件扩展名从.vbs更改为.js并逐个修复错误来转换程序。 我最终让程序运行而不会引发错误,它实际上运行 IE 并显示密码框窗口,但是当我单击"提交"按钮时它崩溃了。 我希望真正了解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;
}

也许最简单的解决方案是向页面添加一个元标记,以便它强制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;
}