2016-11-15 4 views
1

J'essaye d'automatiser une tâche répétée de remplissage de formulaire en utilisant HTA. J'opte la page Web dans un IFrame. la toute première page est la page de connexion. Je suis capable d'accéder facilement aux éléments de nom d'utilisateur et mot de passe de cette page (affichée en IFrame), et donc capable de s'autologiser en cliquant sur un bouton dans HTA. Mais maintenant, la page suivante contient une zone de texte, que j'ai besoin de remplir, puis cliquez à nouveau sur un bouton. Maintenant, j'ai un bouton dans HTA. Quand je clique sur ce bouton, je veux que la zone de texte doit remplir avec la valeur que j'ai fournie. Mais à la place, j'obtiens cette erreur, Impossible de définir la propriété 'valeur' ​​d'une référence nulle. Sur cet affichage de cet objet en utilisant une alerte, il affiche 'null'. Je ne comprends pas, pourquoi je suis capable de référencer les éléments sur la page de connexion et pourquoi pas sur les pages intérieures.Objet IFrame renvoyant la valeur null lorsque référencé par HTA contenant le IFrame

est mon code ci-dessous:

<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> 

bouton -Show PIA affiche la page de connexion. Fonctionnement fin.

-Le bouton de connexion permet de se connecter automatiquement. Fonctionnement fin.

-Entre Le bouton Runcntl permet de remplir une zone de texte. NOT Working Fine.

Ce n'est pas seulement avec cette zone de texte, j'ai aussi les mêmes problèmes avec d'autres élémts de cette page. PS: C'est un site intranet de PeopleSoft.

Répondre

2

Le contenu de PeopleSoft est contenu dans un iFrame lui-même. Vous devez donc récupérer l'iFrame targetContent et y rechercher l'élément.

La page de connexion initiale de PeopleSoft n'est pas affichée dans un iFrame.

J'ai changé le dernier ID d'élément pour que cela fonctionnera sur le composant: PeopleTools-> Processus Scheduler-> Processus système Demandes

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'; 
} 
+0

Thats grand @ Darryls99, il a fonctionné à merveille. Je n'étais pas conscient du fait que Peoplesoft en soi est contenue dans un IFrame. Cependant, j'ai besoin de savoir une chose, à propos de l'iframe, "ptifrmtgtframe", est-ce un iFrame générique utilisé par toutes les pages? ou différentes pages sont affichées dans différents Iframes? Où puis-je obtenir cette information? Merci :-) –

+1

Réponse courte oui que iframe est utilisé de manière cohérente à travers PeopleSoft AFAIK. Réponse longue: En modifiant l'URL et en fonction du type de contenu, l'iframe peut être présent ou non. Dans l'URL, prenez soin du nom du serveur, si vous passez de psp à psc, vous obtiendrez juste le contenu de l'iframe. (pas de navigation). Il existe également d'autres types de contenu PeopleSoft qui peuvent ou non figurer dans un iframe (weblibcs, pages d'accueil, navigation, etc.). Si trouvé le nom de iFrame en utilisant les outils de développement intégrés dans le navigateur pour regarder la page. – Darryls99

+0

Merci @ Darryls99. Mais qu'en est-il des pages qui apparaissent sous forme de pages flottantes, par exemple dans le cas de la page Process Schedular Request, où nous sélectionnons les processus et le serveur à exécuter. Est-ce aussi un IFrame? comment référencer ses éléments. Excuses si je suis curieux, peut soulever une nouvelle question si nécessaire. :-) –