在 HTA 中获取 IFrame 的元素时出错

Error while fetching elements of an IFrame inside HTA

我们正在努力实现 Intranet 站点的自动化。为此,我们将 HTA 与 java 脚本一起使用。我们没有在浏览器中打开站点,而是使用带有 HTA 本身的 Iframe(因为浏览器安全设置禁止我们做任何事情)。 Eare 能够登录该网站,但是,从那以后的每一步之后,我们都会收到此错误消息,显示 "Unable to get property 'children' of undefined or null reference." 在此下方它还给出了 URL :http://*********..*:8888/cs/domainname/cache/PT_HNAV_JS_MIN_1。 js

更具体地说,它是一个 peoplesoft 站点。有人可以阐明如何解决这个问题吗?

下面是 HTML 代码:

    <html>
    <head>
    <HTA:APPLICATION
         APPLICATIONNAME="HTA"
         SYSMENU="YES"
     >

    <meta http-equiv="x-ua-compatible" content="ie=9">
    <title>HTA</title>

    <script type="text/javascript">

    function Start() {
    var iframePage = document.getElementById('iframeid').contentDocument;
    var userId = iframePage.getElementById("userid");
    var passwd = iframePage.getElementById("pwd");
    var form = iframePage.getElementById("login");
    userId.value='@@';
    passwd.value='@@';
    form.submit();
    }

    </script>
    </head>
     <body> 
    <form class="form" name="form">
        <input class="links" type="button"  value="Project Plan" onclick="Start();" /> 
    </form> 
        <iframe application="no" src="http://****.**.****:8888/psp/sitename/?cmd=login&languageCd=ENG&" width="600" height="600" id="iframeid"> 

    </body> 
    </html>

我可以在下面的相关 js 文件中找到 children 的第一次出现:

this.fakeBCReqWC = false;  
var bchidden = 0; 
if(eBC.childNodes.length == 0)     bchidden=1; 
this.bcScrollUl = ptUtil.id(pthNav.bcScrollId); 
if    (eBC.children[1])
     var clickedURL = eBC.children[1].firstChild.href; 
var nChildren = 0;     
if     (this.bcScrollUl)
     nChildren = this.bcScrollUl.children.length;  
var nIdx = 0;  
if        (this.fakeBCSetN) {
var isBCpath = false; 
var fakechildindex = 0; 
var i = 0; 
while(nIdx <     nChildren) {
     var child = this.bcScrollUl.children[nIdx]; 
if(child.id && child.id.indexOf    ("FAKE") != -1 && child.firstChild &&     child.firstChild.href     == clickedURL) {
     isBCpath = true; fakechildindex = nIdx;  break; }
     nIdx++; }

不确定你为什么申请="no" 您应该执行 application="yes" 以启用 iframe 和父 hta window 进行通信并允许您的 hta 与 iframe dom 一起工作。 然而,这是我在使用 IE6/7 时使用 HTA 的经验,那是很久以前的事了

在 msdn 上查看更多信息:

https://msdn.microsoft.com/en-us/library/ms536496(v=vs.85).aspx#Security

将 x-ua-compatible 更改为指向 IE 11 解决了该问题。早些时候它指向IE9。