Fonctions Javascript, frame, et URL

Salut à tous,
pour m’exercer en programmation, je voulais automatiser un jeu disponible sur Facebook, grace à un script dans une frame.

Ce qui donne pour l’index :


<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
<!-- Debut
function loadFrames(haut, bas) {
framecode = "<frameset rows='20%,80%'>"
+ "<frame src='" + haut + "'>"
+ "<frame src='" + bas + "'>"
+ "</frameset>";
page = window.open("");
page.document.open();
page.document.write(framecode);
page.document.close();
}
// Fin -->
</script>
</head>
<body>
<div align="center"><a href="javascript:loadFrames('1.php','2.php')">Go</a>
</div>
</body>
</html>

Pour la frame haut avec le script :


<html>
<head>
</head>
<body>
<input type="button" name="lancement" value="Lancement" onclick="Lance_la_fonction()">
</body>
</html>

Et pour la frame bas (celle qui inclu FB) :


<object data="http://facebook.com/" type="text/html" width="100%" height="¨100%" /> 

Alors voilà, mon problème est que je n’arrive pas à créer une fonction dans la frame haut, envoyant à intervalle régulier une URL différente à chaque fois, dans la frame bas.
Cette fonction se lancerait en cliquant sur le bouton.

Des avis de connaisseurs pour m’aiguiller svp ?

Merci à vous !
Edité le 31/08/2009 à 17:10

  1. PHP, dans ton cas, ca sert à rien.

  2. Tu devrais t’en sortir sans la frame du haut, juste une fenetre et une frame fille.

  3. Au cas ou, tu as l’objet Javascript “opener” pour identifier le document parent à la frame du haut. Ensuite tu redescends sur la bonne frame.

Merci de ta réponse.

J’ai donc reconsédérer ma page et cela marche.

Mais voilà qu’un nouveau problème apparait :
je dois envoyer des URL différentes à intervalles réguliers.

j’ai donc testé de le faire avec setTimeout() . ce qui me donne ça :


<SCRIPT language="Javascript">
<!--

function Lance() {
	setTimeout("parent.bas.location=\"MON_URL_UN\"", 3000);
	setTimeout("parent.bas.location=\"MON_URL_DEUX\"", 3000);
	setTimeout("parent.bas.location=\"MON_URL_N\"", 3000);	
}
 
//-->
</SCRIPT>

Et voilà que je me heurte à un autre problème.
Le script lance au bout de 3s la dernière URL, sans lancer les autres au préalable !

Savez vous d’où celà peut venir ?

Merci de votre aide.
Edité le 31/08/2009 à 14:17

A l’époque, j’avais essayé un ptit peu ogame et on en est vite arrivé à ce que tu essaies de faire. Le principe de base est bon : encapsuler une fenetre par une autre pour pouvoir la piloter en Javascript.

Avec frameset :
Oublie le point 2, et vas directement au 3. Désolé, j’avais oublié que le tag se substituait à body. Avant, je faisais :

function Lance_la_fonction() {
   parent.frames[1].getElementById("...") // etc
}

Mais apparement les navigateurs l’interdisent si la cible n’est pas du meme nom de domaine (Probleme de XSS je pense).

Bon après j’ai pas essayé très longtemps pour te fournir davantage de réponse … Néanmoins, tu peux utiliser un autre outil qui te permet de piloter une IHM :

  • Selenium + Selenium IDE
  • Webtests

A la base, c’est pour faire des tests d’IHM. Mais tu peux l’utiliser pour automatiser tes manips.

Merci de intéresser à mon problème, je me sens moins seul ^^"

Mais je ne sais pas exactement ou veux-tu que j’en vienne avec ce que tu m’as fourni. :-/

Ce que je veux faire, c’est une appli disponible de partout, pour faire mon traintrain sur facebook. Donc je suis parti de cette idée là, en me disant que ça serait une occasion de me remettre au JS, que je n’avais jamais eu l’occasion approfondir.

Si c’est faisable, alors je tenterai. Je suis pas là avec une limite de temps. Juste, j’aimerai savoir, pourquoi mon code n’effectue pas les actions demandées, si ce n’est la dernière …
Au total, j’ai 24 liens à lancer pour automatiser la partie la plus barbante du jeu. J’aimerai donc les envoyer à intervalle régulier pour laisser le temps à la page de se lancer, et renvoyer le suivant, ceci, jusqu’à la fin.

Merci en tout cas de prendre le temps de me répondre. :wink:

Hmm … parce que tu lui demandes de déclencher 3 trucs au meme moment. Donc essaie plutot le premier à 5s, le second à 10s, et enfin à 15s. En supposant que 5s suffisent à faire charger la page…

<SCRIPT language="Javascript">
<!--

function Lance() {
	setTimeout("parent.bas.location=\"MON_URL_UN\"", 5000);
	setTimeout("parent.bas.location=\"MON_URL_DEUX\"", 10000);
	setTimeout("parent.bas.location=\"MON_URL_N\"", 15000);	
}
 
//-->
</SCRIPT>

Merci !

Je n’avais jamais vu les choses comme ça ^^"

C’est super sympa à toi d’avoir pris le temps de m’aider. Je vais pouvoir finir mon script tranquillement !

Encore merci et bonne continuation !

Ce message n’était pas conforme aux règles d’utilisation du nouveau forum :

^ ^)