6

文件1.html

<html>
<head>
<title>AIDS (Automated ID System)</title>
<HTA:APPLICATION 
    id="frames" 
    border="thin" 
    caption="yes" 
    icon="http://www.google.com/favicon.ico" 
    showintaskbar="yes" 
    singleinstance="yes" 
    sysmenu="yes" 
    navigable="yes" 
    contextmenu="no" 
    innerborder="no" 
    scroll="auto" 
    scrollflat="yes" 
    selection="yes" 
    windowstate="normal" />

<script language="javascript" type="text/javascript">

    function pausecomp(millis) 
    { 
        var date = new Date(); 
        var curDate = null; 
        do { curDate = new Date(); } 
        while(curDate-date < millis); 
    } 

    function getWindowsUserName()
    {
        var WinNetwork = new ActiveXObject("WScript.Network");
        var urlToSite = createCustomURL(WinNetwork.UserName);
        var frame = document.getElementById("psyncLink"); 
        frame.onload = function() { 
            frame.onload = null; 
            if (requestingPassword()) { 
                //alert("password button screen");
                passwordButtonScreen();
            } else { 
                alert("direct password required"); 
            } 
        } 
        frame.src = urlToSite;
    }

    function requestingPassword()
    {       
        var btn = window.frames[1].document.getElementsByName("SUBMIT-password.pss");
        if (btn.length == 0) {
            return false;
        } else {
            return true;
        }
    }

    function passwordButtonScreen()
    {       
        var btn = window.frames[1].document.getElementsByName("SUBMIT-password.pss");       
        btn[0].click();     
    }

    function createCustomURL(userName)
    {
        var customURL = "http://localhost/nph-psf.exe?HOSTID=AD&ALIAS=" + userName;
        return customURL;
    }

    function Sleep(milliseconds) {
        var start = new Date().getTime();
        for (var i = 0; i < 1e7; i++) {
            if ((new Date().getTime() - start) > milliseconds){
                break;
            }
        }
    }

    function whichScreen() { 
        var btn = window.frames[1].document.getElementsByName("SUBMIT-password.pss"); 
        if (btn.length == 0) { 
            alert("no button!"); 
            // User is at password screen
            var textField = window.frames[1].document.getElementsByName("_MYPW");
            textField[0].text = "";
            return; 
        } else { 
            btn[0].click();
            WaitSeconds(5);
            var textField = window.frames[1].document.getElementsByName("_MYPW");
            textField[0].value = "ios12sdk";
            btn = window.frames[1].document.getElementsByName("SUBMIT-VERIFY");
            btn[0].click();
        }
    }

    var loadOtherFrame = function (text) { 
        getWindowsUserName(); 
        alert(text);
    };

</script>

    </head>     
    <frameset cols="300px, *"> 
        <frame src="leftframe.html" name="topo" id="topo" application="yes" /> 
        <frame src="topo1.htm" name="psyncLink" id="psyncLink" application="yes" /> 
    </frameset>     
</html> 

leftframe.html

<html>

<head>
  <title>AIDS&nbsp;Assistant</title>
</head>
<script language="javascript">

function checkPassword() {
  var validString = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
  if (validString.test(document.getElementById("newPassword").value)) {
    alert("The password is valid");
    var validate = function () {
        // validate textbox input ...
        // call parent page function
        parent.loadOtherFrame(document.getElementById("newPassword").value);
    };
  } else {
    alert("The new password does NOT meet the requirements. Please try again.");
  }
}



</script>

<body>
    <table width="300px">
        <tr>
            <td>Type Your Old Password</td>
            <td><input id="oldPassword" type="text" maxlength="8" /></td>
        </tr>
        <tr>
            <td>Please type your new password</td>
            <td><input id="newPassword" type="text" maxlength="8" min="8" /></td>
        </tr>
        <tr>
            <td colspan="2"><input id="checkOldPassword" type="button" title="Check New Password" value="Check New Password" onclick="checkPassword()" /></td>
        </tr>
    </table>

</body>

</html>

让我澄清一下我在做什么

  1. leftframe.html 需要验证一个文本框
  2. 处理完左帧后。它需要通知父窗口file1.html,这样才能加载第二帧(topo1.htm)

topo.htm 不存在,因此 HTA 应用程序加载页面无法找到该特定框架,但当我们从 loadOtherFrame 调用函数 getWindowsUserName() 时它应该改变。如 tjscience 所示,从 leftframe.html 文件调用 loadOtherFrame。

当我运行 HTA 时,正在调用 loadOtherFrame(在单击 leftframe.html 按钮之前)

4

2 回答 2

2

我假设你framesetframe已经不在了。top.window.frame_name您可以通过任何frametop.window本身访问所有帧。

form_in_psyncLink=top.window.psyncLink.document.getElementById('form_id');

编辑

如果此外部页面不在同一个域中,则您无法通过常规方式访问其内容。阅读更多关于JavaScript 的同源政策。(AFAIK HTA 不会改变这种行为。)

我上面的示例为您提供了对 的引用psyncLink,您自然会在验证脚本中使用它来访问元素psyncLink以“粘贴”数据。(在这种情况下,由于跨域页面,这可能是不可能的)

于 2012-06-19T15:08:22.627 回答
1

编辑以包括将文本输入传递到父页面

验证文本框时,您可以从框架中调用父页面中的函数:

JS IN Leftframe.html

<script type="text/javascript">
    var validate = function () {
        // validate textbox input ...
        // call parent page function, passing the text from the input
        parent.loadOtherFrame(text);
    };
</script>

file1.html 中的 JS

<script type="text/javascript">
    var loadOtherFrame = function (text) {
        // load other frame here ...
    };
</script>
于 2012-06-19T16:49:28.307 回答