IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Exécuter une fonction javascript qui se trouve dans un lien HTML par un bouton et TWebBrowser


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut Exécuter une fonction javascript qui se trouve dans un lien HTML par un bouton et TWebBrowser
    Salut tous le monde, je suis entrain de programmer une petite application de réservation de RDV qui a un aspect semi-automatique pour cela je cherche comment executer une fonction de JavaScript qui se trouve dans une page HTML comme le montre le code HTML suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:void(0);" onclick="sendOTP();" class="marginBottom paddingInBox white" style="background-color: #409e21;">demander le code de vérification</a>
    Je veux savoir comment je peux utiliser la fonction SendOTP() en utilisant OleObject de TWebBrowser.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Si le code sendOTP() est complexe
    Il te faudrait intégrer un compilateur JIT JavaScript si cela existe et lui fournir tous les fichiers de dépendance.
    Tu devrais plutôt repenser ton architecture et transformer le code de sendOTP() en un WebService

    Si le code sendOTP() c'est juste un appel type AJAX JQUERY
    Il te suffit d'avoir un client REST pour invoquer son WebService

    sendOTP vu son nom doit être pour l'identification, j'espère que c'est une simple API à appeler
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si le code sendOTP() est complexe
    pour le code de la fonction le voilà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    function sendOTP()
    {
         var email = $('#email').val();
    	 var jurisId = $('#juridiction').val().split('#');
    	 var phoneCode = $("#phone_code").val();
    	 var mobileNo = $("#phone").val();
    	 var visa = $("#visa_no").val();
    	 if(mobileNo!='' && phoneCode!='' && jurisId[2]!=''){
    		 $('#phone_code').removeClass('error');
    		 $('#phone').removeClass('error');
    		 $('#juridiction').removeClass('error');
    		 $("#overlay").show();	
    		 $.ajax({
    			type: "POST",
    			data: "gofor=send_mail&email="+email+"&phone_code="+phoneCode+"&phone_no="+mobileNo+"&center_id="+jurisId[2]+"&visa="+visa+"&token=d6d5e28453650174abda90a11ecedb5d",			
    			url: "ajax.php",
    			success: function(response)
    			{
    				$("#overlay").hide();
    				if(response.trim() == "full"){
    					$("#reponse_div").html("Appointment dates are not available.");
    				}else if(response.trim() == "fail"){
    					$("#reponse_div").html("You have already booked appointment with this phone. Please try with another number.");
    				}else if(response.trim() == "same"){
    					$("#reponse_div").html("Please used last sent verification code.");
    				}else if(response.trim() == "error"){
    					$("#reponse_div").html("Please check your phone number and country code for phone.");
    				}else{
    					//$("#phone_code").attr('readonly', 'readonly');
    					//$("#phone").attr('readonly', 'readonly');
    					$("#reponse_div").html("Verification code sent to your phone.");
    				}
    			}
    		});
    	 }else{
    		 $('#phone_code').addClass('error');
    		 $('#phone').addClass('error');
    		 $('#juridiction').addClass('error');
    	 }
    }
    ce code je l'invoque depuis une page web distante non local et dans cette page par exemple si je veux remplir un champ d'un formulaire j'utilise le code suivant (par exemple je veux remplir le champ email qui a comme id email):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WebBrowser1.OleObject.Document.GetElementByID('email').setAttribute('value','');
    WebBrowser1.OleObject.Document.GetElementByID('email').setAttribute('value',edit1.Text);

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Le code est complexe parce qu'il utilise jQuery

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    ce code je l'invoque depuis une page web distante non local
    Cette précision n'était pas utile, je vois pas qui aurait pensé que cela était depuis un serveur web local ou dans un HTML stocké en fichier
    Il est évident que tu essayes de te servir d'un site web via ton application et tu n'en es pas l'auteur, ni même l'admin

    Soit tu trouves comment simuler le Click sur le Bouton associé, ça c'est valable si tu fais un truc expérimental pour le fun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var
      Buttons: OleVariant;
      Button: OleVariant;
      I: Integer;
    begin
      Buttons := WebBrowser1.OleObject.Document.getElementsByClassName('marginBottom paddingInBox white');
      for I := 0 to Buttons.Length - 1 do
      begin
        Button := Buttons.item(I);
        if Button.innerText = 'demander le code de vérification' then
        begin
          Button.click();
          Break;
        end;
      end;
    end;
    Soit tu contactes le site pour obtenir une API REST, ça c'est professionnel et apporte une solution plus pérenne à ton projet (et ton client)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    la partie intéressante est ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    type: "POST",
    data: "gofor=send_mail&email="+email+"&phone_code="+phoneCode+"&phone_no="+mobileNo+"&center_id="+jurisId[2]+"&visa="+visa+"&token=d6d5e28453650174abda90a11ecedb5d"
    url: "ajax.php"
    il est donc possible d'utiliser TidHTTP.Post()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      SL: TStringList;
    begin
      SL := TStringList.Create;
      SL.Add('gofor=send_mail');
      SL.Add('email=' + email);
      SL.Add('phone_code=' + phoneCode);
      SL.Add('phone_no= ' + mobileNo);
      SL.Add('center_id=' + jurisId);
      SL.Add('visa=' + visa);
      SL.Add('token=d6d5e28453650174abda90a11ecedb5d');
      idHTTP1.Post(Server + 'ajax.php', SL);
    end;
    mais il est probable que le token soit généré dynamiquement et il faut retrouve les valeurs des différentes variables
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Merci à tous en cherchant plus j'ai trouver cette merveilleuse fonction qui m'a permis d’exécuter une fonction JS qui se trouve dans un lien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    uses
      MSHTML_TLB, SHDocVw, ShellAPI;
     
    function ExecuteScript(doc: IHTMLDocument2; script: string; language: string): Boolean;
    var
      win: IHTMLWindow2;
      Olelanguage: Olevariant;
    begin
      if doc <> nil then
      begin
        try
          win := doc.parentWindow;
          if win <> nil then
          begin
            try
              Olelanguage := language;
              win.ExecScript(script, Olelanguage);
            finally
              win := nil;
            end;
          end;
        finally
          doc := nil;
        end;
      end;
    end;

    et pour exécuter ma fonction SendOTP() j'ai du l'appeler avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
    iDoc: IHTMLDocument2;
    begin
    Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc);
    ExecuteScript(iDoc, 'onclick=sendOTP()', 'JavaScript');
    end


    Merci à tous le monde

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter une fonction Javascript OnMouseOver
    Par Friedrick dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 07/07/2008, 10h32
  2. Réponses: 2
    Dernier message: 16/07/2007, 16h04
  3. Réponses: 4
    Dernier message: 09/08/2006, 10h41
  4. Réponses: 2
    Dernier message: 12/06/2006, 12h35
  5. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo