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

Composants VCL Delphi Discussion :

modifier code HTML avant affichage dans TWebBrowser


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut modifier code HTML avant affichage dans TWebBrowser
    Bonsoir à tous

    Une petite question de néophyte.
    Est-il possible de modifier le code html d'une page en cours de reception avant son affichage dans un TWebBrowser?

    Par exemple, supposons que l'URL demandée soit "www.perdu.com"
    Le site renvoie ce code html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>
    Je voudrais modifier à la volée le "ici" en "là" afin qu'au finale le TWebBrowser recoive et affiche ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes l&agrave;</pre></strong></body></html>
    Pour info, je demande ceci afin de pouvoir remettre en forme une page web avant de l'afficher dans mon programme.

    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 549
    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 549
    Points : 25 119
    Points
    25 119
    Par défaut
    Utilise OnDocumentComplete pour lire les objets du TWebBrowser

    Si tu as des violations d'accès sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebBrowser.OleObject.Document.Body.InnerHTML := NouveauTexteHTML;
    C'est que les objets ne sont pas tous chargés, voici une fonction pour attendre que les objets soient tous prêt ce qui arrive parfois une à deux secondes APRES le OnComplete !

    Tu peux modifier le HTML mais pas le JavaScript qui lui est déjà chargé !

    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
    // -----------------------------------------------------------------------------
    procedure WaitWebAssigned(const WebBrowser: TWebBrowser; TimeOut: Cardinal);
    var
       StartTime, PointTime(*, DiffTime*): Cardinal;
    begin
         try
            StartTime := GetTickCount();
            repeat
              Sleep(1); // Il laisse une Milliseconde Entière aux Autres Processus
              Application.ProcessMessages();
              PointTime := GetTickCount();
            // Continue tant que l'Objet est vide ou que le Délai Maximum soit écoulé
            until not VarIsEmpty(WebBrowser.OleObject.Document) or (PointTime >= StartTime+TimeOut);
     
            if not VarIsEmpty(WebBrowser.OleObject.Document) then begin
               StartTime := GetTickCount();
               repeat
                 Sleep(1); // Il laisse une Milliseconde Entière aux Autres Processus
                 Application.ProcessMessages();
                 PointTime := GetTickCount();
               until not VarIsEmpty(WebBrowser.OleObject.Document.Body) or (PointTime >= StartTime+TimeOut);
            end;
         except
            ShowMessage('L''Affichage HTML ne sera pas disponible avant quelques secondes !');
         end;
    end;
    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
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Merci pour l'info

    J'avais aussi trouvé un truc basé sur un IHTMLBodyElement

    Cependant, je suis ennuyé car justement, comme le nom l'indique, je ne peux modifier que ce qui appartien à la section >body></body>

    Comment faire pour pouvoir modifier TOUS les élements d'une page (head, body, bouton, javascript,...)

    Merci d'avance

    Pour info, voila ce que j'avais trouvé et fait :
    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
    uses mshtml;
     
    procedure WBReplace(WB: TWebBrowser; Text: string) ;
    const
       newcode = 'ici';
    var
       tr: IHTMLTxtRange;
    begin
       if Assigned(WB.Document) then
       begin
         tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
         while tr.findText(Text, 1, 0) do
         begin
           tr.pasteHTML(newcode) ;
           tr.scrollIntoView(True) ;
         end;
       end;
    end;
    avec un appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WBReplace(WebBrowser1,'la') ;
    quand je clique sur un bouton

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    @Salut,

    Ne peux tu pas simplement prendre ta page html la mettre dans ou transformer en format text classique ?
    traité le fichier text et au final afficher ce fichier en html ?

    A ce que je sache 90% des pages de navigation peuvent être vue dans un notepad, modifié et réaffiché.

    T'utilise la méthode de Shail pour patienté et puis tu tranforme...

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    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 549
    Points : 25 119
    Points
    25 119
    Par défaut
    D'accord avec Buzz, j'utilisais pour ma part, stringreplace pour remplacer du code HTML par un autre (retiré les images) ou injecter des POST, des boutons en plus ... je parsais un jeu comme ça, un programme jouait à ma place
    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
    Nouveau membre du Club
    Homme Profil pro
    Chercheur - Programmeur amateur
    Inscrit en
    Août 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur - Programmeur amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2005
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Pourquoi pas, mais en procedant ainsi, cela va-t-il garder les formulaires (balises input) fonctionnels (basé sur des cookies)

Discussions similaires

  1. Récupérer le code HTML avant affichage
    Par paf84 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 14/09/2009, 16h09
  2. [AC-2000] faire des regroupements avant affichage dans un formulaire
    Par Nashe dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/09/2009, 15h04
  3. [HTML:ERROR] affichage dans une popup dédiée
    Par jdvacheron dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/02/2008, 12h17
  4. [CKEditor] Probleme pour afficher le code html apres insertion dans bdd
    Par Pepito2030 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 28/12/2006, 21h52
  5. [JDIC] modifier la page avant affichage
    Par iuz dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/07/2006, 15h36

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