IFrame对象在从包含IFrame的HTA引用时返回null

时间:2016-11-15 11:43:39

标签: javascript html iframe hta peoplesoft

我正在尝试使用HTA自动执行表单填写的重复任务。我正在将网页打开成IFrame。第一页是登录页面。我可以轻松访问该页面的用户名和密码元素(在IFrame中显示),因此可以通过单击HTA中的按钮进行自动登录。但现在,下一页包含一个文本框,我需要填写然后再单击一个按钮。现在,我在HTA中有一个按钮。当我单击此按钮时,我希望文本框应填充我提供的值。但相反,我得到此错误,无法设置空引用的属性“值”。在使用警报显示此对象时,它显示“null”。我没有得到,为什么我能够在登录页面上引用元素,为什么不在内页上。

以下是我的代码:

<html>
<head>
 <HTA:APPLICATION
     APPLICATIONNAME="HTA"
     SYSMENU="YES"
     NAVIGABLE="YES"
>
    <meta http-equiv="x-ua-compatible" content="ie=11">
    <title>HTA</title>

<script type="text/javascript">
    window.resizeTo(700,700);
</script>

<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='uu';
passwd.value='pp';
form.submit();
}

function Show() { 
    document.getElementById("iframe").style.display = "block";
}

function FillRncntl() {
var iframePages = document.getElementById("iframeid").contentDocument;;
var runcntl = iframePages.getElementById("PRCSMULTI");
runcntl.value='test';
}

</script>

</head>
 <body> 
        <form class="form" name="form">

                <input class="links" type="button"  value="Show PIA" onclick="Show();" /> 
                <input class="links" type="button"  value="Login" onclick="Start();" /> 
                <input class="links" type="button"  value="Enter Runcontrol" onclick="FillRncntl();" />
        </form> 
        <br>
        <div class="iframe" id="iframe" style="display:none">
        <iframe application="no" src="www.xyz.com" width="600" height="600" id="iframeid"> 
        </div>

 </body> 
 </html>

- 显示PIA按钮显示登录页面。 工作正常

-Login按钮用于自动登录。 工作正常

-Enter Runcntl按钮用于填充某些文本框。 不能正常工作

它不仅有这个文本框,我也有与此页面中的其他元素相同的问题。

PS:它是Peoplesoft Intranet网站。

1 个答案:

答案 0 :(得分:2)

PeopleSoft内容包含在iFrame中,因此您需要获取targetContent iFrame并在其中搜索元素。

最初的PeopleSoft登录页面不会显示在iFrame中。

我更改了最后一个元素ID,以便它可以在组件上运行:PeopleTools-&gt; Process Scheduler-&gt; System Process Requests

function FillRncntl() {
   var iframePages = document.getElementById("iframeid").contentDocument;
   var targetContent = iframePages.getElementById("ptifrmtgtframe").contentDocument;
   var runcntl = targetContent.getElementById("PRCSRUNCNTL_RUN_CNTL_ID");
   runcntl.value='test';
}