当从包含 IFrame 的 HTA 引用时,IFrame 对象返回 null
IFrame object returning null when referenced from HTA containing the IFrame
我正在尝试使用 HTA 自动执行重复的表单填写任务。我将网页打开到一个 IFrame 中。第一页是登录页面。我能够轻松访问该页面(显示在 IFrame 中)的用户名和密码元素,因此能够通过单击 HTA 中的按钮自动登录。但是现在,下一页包含一个文本框,我需要填写它然后再次单击一个按钮。现在,我在 HTA 中有一个按钮。当我单击此按钮时,我希望文本框应填充我提供的值。但是相反,我收到此错误,无法设置空引用的 属性 'value'。在使用警报显示此对象时,它显示 '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 按钮显示登录页面。 工作正常。
-登录按钮用于自动登录。 工作正常。
-Enter Runcntl 按钮用于填充一些文本框。 工作不正常。
不仅是这个文本框,我对这个页面的其他元素也有同样的问题。
PS : 它是一个 Peoplesoft Intranet 网站。
PeopleSoft 内容包含在 iFrame 本身中,因此您需要获取 targetContent iFrame 并在其中搜索元素。
初始 PeopleSoft 登录页面未显示在 iFrame 中。
我更改了最后一个元素 ID,以便它可以在组件上运行:PeopleTools->Process Scheduler->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';
}
我正在尝试使用 HTA 自动执行重复的表单填写任务。我将网页打开到一个 IFrame 中。第一页是登录页面。我能够轻松访问该页面(显示在 IFrame 中)的用户名和密码元素,因此能够通过单击 HTA 中的按钮自动登录。但是现在,下一页包含一个文本框,我需要填写它然后再次单击一个按钮。现在,我在 HTA 中有一个按钮。当我单击此按钮时,我希望文本框应填充我提供的值。但是相反,我收到此错误,无法设置空引用的 属性 'value'。在使用警报显示此对象时,它显示 '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 按钮显示登录页面。 工作正常。
-登录按钮用于自动登录。 工作正常。
-Enter Runcntl 按钮用于填充一些文本框。 工作不正常。
不仅是这个文本框,我对这个页面的其他元素也有同样的问题。
PS : 它是一个 Peoplesoft Intranet 网站。
PeopleSoft 内容包含在 iFrame 本身中,因此您需要获取 targetContent iFrame 并在其中搜索元素。
初始 PeopleSoft 登录页面未显示在 iFrame 中。
我更改了最后一个元素 ID,以便它可以在组件上运行:PeopleTools->Process Scheduler->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';
}