Bonjour,
J'ai besoin de modifier (convertir en XHTML en fait) une page affichée dans un WebBrowser. La conversion fonctionne bien (merci Tidy!) mais impossible de mettre à jour la page affichée. Apparemment, on ne peut pas écrire dans un WebBrowser.Document.
Le mieux que j'aie réussi à faire jusqu'ici a été de faire une copie de la page affichée (avec IHTMLDocument2) et de modifier cette copie. Mais cela casse les liens du type href="..." ou src="..." qui font référence à une adresse relative à la page (les objets référencés sont normalement téléchargés avec la page dans les fichiers temporaires d'IE).
J'ai donc le choix : soit il y a une solution pour modifier le source d'une page affichée dans un WebBrowser à la volée (donc le fichier HTML présent dans les fichiers temporaires d'IE) soit je modifie ma copie du document en insérant l'URL du site là où il faut pour rétablir les références aux objets (galère et je ne suis pas sûr que ça fonctionne...)
Voici le code qui effectue la conversion sur la copie :
Si quelqu'un a une solution pour réécrire sur le Document du WebBrowser je suis preneur!
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 TFNavigateur.ItemCorrigerPageClick(Sender: TObject); var V, vDocument, vMIMEType, vHTML: OleVariant; begin //Arrêt du WebBrowser par sécurité... WebBrowser1.Stop; // On chope le document affiché V:= WebBrowser1.Document; //puis le script du document (comme en JavaScript...) vDocument:= V.script.document; // le type MIME qui va bien pour IE vMIMEType:= 'text/html'; // Conversion du document avec Tidy Tidy1.LoadConfigFile('\temp\tidyconfig'); //fichier de config pour tidy (Latin1...) Tidy1.ParseString(V.body.parentElement.outerHTML); vHTML:= Tidy1.XHTML; // Réouverture du document pour écriture vDocument.Open(vMIMEType); //on vire ce qui est déjà dedans vDocument.Clear; //et on y met la page convertie en XHTML vDocument.Write(vHTML); //la fermeture du document permet l'affichage dans le WebBrowser vDocument.Close; end;
Merci d'avance!
Partager