COMATE et clic sur bouton image [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

COMATE et clic sur bouton image [Résolu]

Message par Kwai chang caine »

Bonjour à tous

Je suis en train d'utiliser le splendid PBI COMATE du grand SROD 8)
Dans lequel il a ajouté une fonction d'execution de code Javascript

Ca marche nikel avec google parce que ce sont des boutons traditionels.
Mais avec une page d'identification que j'essaye d'ouvrir, bah ça marche pas parce que le bouton est une image :?

Voici le bijoux COMATE

Code : Tout sélectionner

IncludePath ".." 
XIncludeFile "COMate.pbi" 

Define.COMateObject WebObject 

Procedure.i ExecuteJavaScript(Gadget, command$) 
  Protected browser.COMateObject, documentDispatch.COMateObject, script.COMateObject 
  Protected result 
  browser = COMate_WrapCOMObject(GetWindowLong_(GadgetID(gadget), #GWL_USERDATA)) 
  If browser 
    documentDispatch = browser\GetObjectProperty("Document") 
    If documentDispatch 
      script = documentDispatch\GetObjectProperty("script") 
      If script 
        result = script\Invoke("eval('" + command$ + "')") 
        script\release() 
      EndIf  
      documentDispatch\Release() 
    EndIf 
    browser\Release() 
  EndIf 
  ProcedureReturn result 
EndProcedure 


If OpenWindow(0, 10000, 0, 0, 0, "WebGadget",  #PB_Window_SystemMenu|#PB_Window_Maximize) 
  WebGadget(0, 0, 0, WindowWidth(0)+50,WindowHeight(0)-100, "http://www.google.fr/") 

  ButtonGadget(1,50,WindowHeight(0)-50,150,25,"Fill") 
  ButtonGadget(2,250,WindowHeight(0)-50,150,25,"Send") 
   
  Repeat 
    Event = WaitWindowEvent(); 
    Select Event 
      Case #PB_Event_Gadget 
        Select EventGadget() 
          Case 1 
            xMessage$ = "Hello from PB :)" 
            ExecuteJavaScript(0,"document.all.q.value=" + Chr(34) + xMessage$ + Chr(34)) 
           Case 2
            ExecuteJavaScript(0,"document.all.btnG.click()")
            
        EndSelect 
      Case #PB_Event_CloseWindow 
        Break 
    EndSelect 
  Until GetAsyncKeyState_(#VK_ESCAPE) 
EndIf 
Je pourrais faire la methode "document.myform.submit()" qui marche parce qu'il y a qu'un seul bouton
Mais je me suis posé la question comment je ferais avec plusieurs boutons ????

Donc j'aimerais pouvoir simuler un clic sur une image comme je le fais sur un bouton classic.

Alors j'ai posé la question sur un forum javascript, et la reponse est encore plus compliquée que la question :oops:
J'vous la donne "emile"
Space Frog a écrit :un bouton image se comporte comme un bouton submit au nioveau de la soumission du formulaire et tu ne pourras pas faire autremetn que de mettre une valeur dynamiquement dans un input hidden qui te permettra de savoir quel bouton image tu as emulé ...
Alors je lui ai demandé ce qu'etais un "hidden"
Et la reponse aussi claire que la premiere m'a pas fait avancer d'un "yota" :cry:
Space Frog a écrit :un element de type hidden dans le form n'est pas visible mais est transmis avec les autres données du formulaire ...

Code :

<input type="hidden" name="origine" value="données cachées" id="orignie" />il te suffit de renseigner dynamiquement cet element:


Code :
document.getElementById('origine').value="image1"ainsi coté sreveur tu recupères :

Code :
$_POST['origine']
Alors si "quinquin" a lu le dictionnaire de javascript en entier et que pour lui c'est clair comme de l'eau de roche.....et bin si y pouvait me donner juste un verre de cette eau......parce que KCC il a drolement soif :cry:

Voici la page que je veux ouvrir

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  <html> 
    <head> 
      <title> 
       </title> 
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
      <link rel="shortcut icon" href="/images/icone.ico"> 
  <script language="javascript"> 
    if (document.layers) { 
      document.write("<link rel="stylesheet" type="text/css" href="/styles/style.css">"); 
    } else { 
      document.write("<link rel="stylesheet" type="text/css" href="/styles/style.css">"); 
    } 
  </script> 
      <script language='javascript'> 
        history.forward(); 
      </script> 
    </head> 
    <body class="login" > 
      <form action="/login" method="post" name="myform"> 
        <table width="450"> 
          <tr> 
            <td class="ariane"> 
              <div class="arianeModule"> 
                Authentification 
              </div> 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%"> 
                <tr> 
                  <td width="10" height="10"><img src="/images/bloc_a_hg.gif" width="10" height="10"></td> 
                  <td height="10" bgcolor="#B9C1ED"><img src="/images/pix.gif" width="1" height="1"></td> 
                  <td width="10" height="10"><img src="/images/bloc_a_hd.gif" width="10" height="10"></td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr class="bandeau"> 
            <td class="erreur"> 
 
              &nbsp; 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%" class="bandeau"> 
                <tr> 
                
                  <td class="premiere"> 
                    Identifiant : 
                  </td> 
                  <td> 
                  
                         <input name="login" type="text" class="input" size="30" /> 
                            
 
                  </td> 
                </tr> 
                <tr> 
                  <td class="premiere"> 
                    Mot de passe : 
                  </td> 
                  <td> 
                    <input name="password" type="password" class="input" size="30" /> 
                  </td> 
                </tr> 
                <tr> 
                  <td class="premiere"> 
                    Portail : 
                  </td> 
                  <td> 
                    <select name="portail" class="input" /> 
                      <option value="ENC"> 
                      Programmation et Pilotage des Interventions 
                      </option> 
                      <option value="PIL"> 
                      Administration et Suivi d'Activité 
                      </option> 
                    </select> 
                  </td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr class="bandeau"> 
            <td class="actions"> 
              <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%"> 
                <tr> 
                  <td width="10" height="10"><img src="/images/bloc_a_bg.gif" width="10" height="10"></td> 
                  <td height="10" bgcolor="#B9C1ED"><img src="/images/pix.gif" width="1" height="1"></td> 
                  <td width="10" height="10"><img src="/images/bloc_a_bd.gif" width="10" height="10"></td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr> 
            <td class="erreur"> 
 
            </td> 
          </tr> 
        </table> 
      </form> 
      <script language="JavaScript">document.myform.login.focus();</script>        
    </body> 
  </html>
Merci beaucoup de votre aide
J'ai pas encore demandé sur le forum US parceque si je rajoute encore l'anglais ..... :cry:
Dernière modification par Kwai chang caine le mar. 17/févr./2009 16:03, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

A priori, si tu nommes correctement tes boutons, il te suffit de changer la ligne

Code : Tout sélectionner

ExecuteJavaScript(0,"document.all.btnG.click()") 
pour simuler le click. Là tu cliques "btnG" mais tu devrais pouvoir mettre n'importe quel autre nom de bouton.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben il faut associer chaque bouton à une fonction javascript différente.

Laisse tombé le paramètre caché, pour moi, c'est une connerie. un paramètre caché (input hidden) permet de mémoriser une info précédente mais sans qu'elle soit visible.
Dans le genre, page 1 du formulaire
nom prénom
donc 2 input
page 2
adresse
mais pour ne pas perdre nom prénom, je remets des input masqué dans le formulaire qui contienne ces valeurs
donc quand je fais mon submit, je n'envoi pas que l'adresse, mais j'envoi nom prénom adresse
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci les copains de votre rapidité, KCC y sue toute l'eau de son corp :cry:
A priori, si tu nommes correctement tes boutons, il te suffit de changer la ligne Code:
ExecuteJavaScript(0,"document.all.btnG.click()")
pour simuler le click. Là tu cliques "btnG" mais tu devrais pouvoir mettre n'importe quel autre nom de bouton.
Et ben nom, c'est ça qu'est dingue ça marche pour les boutons normaux mais pas sur une image que l'on clique dessus :?

J'ai essayé sans succes :

Code : Tout sélectionner

document.myform.login.click()
document.post.login.click()
document.all.image.click()
Bien sur comme je l'ai dit document.myform.submit() marche puisque je suppose que c'est comme si je faisais RETURN.

Mais moi, je voulais trouver comment faire un clic, comme ça la prochaine fois que je tombe sur 2 ou plus de ces saloperie d'image bouton et bin je peux cliquer dessus comme sur un bouton normal
Laisse tombé le paramètre caché, pour moi, c'est une connerie. un paramètre caché (input hidden) permet de mémoriser une info précédente mais sans qu'elle soit visible.
Ca tombe bien, j'ai rien compris
J'ai rajouté ces lignes dans la page mais rien de mieux.
Puis il a pas du comprendre que je pilotais une page par un programme.
C'est vrai c'est dur a expliquer ça.

C'est pour ça que je reviens vers la famille qui comprend mieux ce que je veux faire
Mais c'est vrai que le javascript et le WEB, y'en a pas beaucoup qui le manipule je pense....alors voila, j'suis avec deux chaise assis au milieu donc par terre :cry:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ah oui j'ai compris. Ton bouton image est un bouton pour valider ton formulaire. En ce sens il a la même fonction qu'un "submit" classique, toujours au sein d'un formulaire. Tu peux avoir plusieurs formulaires dans une page web, que tu nommes, et que tu peux valider comme ça : monform1.submit(), monform2.submit().
Si tu peux cliquer sur une autre image (qui n'est pas dans un formulaire), il s'agit en général d'un lien. Ca n'a donc rien à voir!
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Alors comment faire pour simuler un click sur cette image ???
Comme si c'etait un bouton

Car maintenant de plus en plus de page on une image a la place d'un bouton classique :?
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

En essayant ceci ? (non testé)

Code : Tout sélectionner

document.getElementsByTagName('input')[2].click();
Pas le temps de regarder plus, j'ai un déjeuner dans 20min :?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour CLS content de te parler aussi :D
Mange tranquillement et des que t'as une idée oublie pas KCC qui est dans le KK et tout KC :D

Alors la, avec toute cette brochette de "WEBeur" pour aider KCC, on va pouvoir faire un barbecue :D et faire griller cette saucisse de bouton image :lol:

Bon j'ai essayé ce que tu as donné et encore plus

Code : Tout sélectionner

Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('input')[2].click();") 
Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('input').click();") 

Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('login').click();") 
Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('login')[2].click();") 
et rien ne se passe meme pas de message d'erreur.
En retour j'ai -2147024809
A mon avis c'est pas bien ça un retour negatif :roll:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Mais euuuuuuh! Tu viens de le dire toi-même! Comme l'image sert à valider un formulaire, il suffit de faire un document.myform.submit() pour valider comme si tu avais cliqué dessus!!! C'est pas plus compliqué que ça...
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

djes a écrit :Mais euuuuuuh! Tu viens de le dire toi-même! Comme l'image sert à valider un formulaire, il suffit de faire un document.myform.submit() pour valider comme si tu avais cliqué dessus!!! C'est pas plus compliqué que ça...

Code : Tout sélectionner

document.myform.submit()
Ça n'a pas déjà été essayé ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Si si mes amis et ça marche. :D

Mais moi je voulais simuler le clic, comme sur le bouton envoyer du forum purebasic par exemple.

Quand je regarde le source du forum quand on ecrit un message a ses copains :D
Pourquoi on peut simuler un clic sur le bouton

Code : Tout sélectionner

<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="Envoyer" />
Et qu'on peut pas sur cette saloperie de bouton image ??? :?

Code : Tout sélectionner

 <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
Je veux simuler le clic, car je sais que va y avoir d'autres pages avec ce genre d'image qui servent de bouton, et je preferais m'entrainer sur une page simple comme celle la :D
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Kwai chang caine a écrit :Si si mes amis et ça marche. :D

Mais moi je voulais simuler le clic, comme sur le bouton envoyer du forum purebasic par exemple.

Quand je regarde le source du forum quand on ecrit un message a ses copains :D
Pourquoi on peut simuler un clic sur le bouton

Code : Tout sélectionner

<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="Envoyer" />
Et qu'on peut pas sur cette saloperie de bouton image ??? :?

Code : Tout sélectionner

 <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
Je veux simuler le clic, car je sais que va y avoir d'autres pages avec ce genre d'image qui servent de bouton, et je preferais m'entrainer sur une page simple comme celle la :D
Je pense que l'objet img n'a pas de méthode click, contrairement à l'objet bouton. Ou alors elle n'est pas implémentée sur ton navigateur. Ou alors, l'image n'est pas bien référencée.
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Je pense que la différence vient de l'attribut "name" qui est initialisé dans le premier cas et qui ne l'est pas dans le second.

Edit : En fait djes semble avoir raison. Voilà ce que j'ai trouvé : http://www.aliasdmc.fr/dom_javascript_h ... click.html
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Donc j'suis cuit aux olives :?

ça veut dire que si un jour je tombe sur une page qui a une dizaine de ces cochonneries.......et bah tintin......... la balayette j'lai bien ou j'pense :?

Si au moins j'pouvais avoir la position de cet element dans la page je pourrais envoyer la souris et cliquer avec PB :D
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Pourquoi ?

Tu ne peux avoir qu'un seul "input type=image" par formulaire. Mais tu peux avoir plusieurs formulaires par page. Donc la solution document.forms.le_nom_du_formulaire.submit() marchera à tous les coups ;)
Répondre