Envoyé par : kris
Date : 06/11/2009 10:24
Bonjour à tous, j'espère avoir posté ma question sur le bon forum. je travaille sur une application écrite en delphi avec un composant "WebBrowser" basé sur IE, dans lequel nous injectons du code HTML généré à partir de XML et transformation XSL, avec des liens vers une feuille de style .css, et des images... Suite à de nombreux soucis (avec IE), j'ai découvert le moteur Gecko et une implémentation faite en Delphi basée sur XPCom. ça commence à fonctionner, mais la seule chose qui m'embête c'est que j'ai perdu la mise en page de ma feuille de style, et que mes images ne sont pas affichées... ça ressemble à un problème de lien ?
Voici comment j'alimente le composant TGeckoBrowser avec en paramètre le code source du html :
procedure TGeckoBrowser.LoadHTML(htmlcode: String); var wbchrome: nsIWebBrowserChrome; wb: nsIWebBrowser; domwindow: nsIDOMWindow; domdoc: nsIDOMDocument; domhtmldoc: nsIDOMHTMLDocument; nsstr: IInterfacedString; begin wbchrome := Self as nsIWebBrowserChrome; wbchrome.GetWebBrowser(wb); wb.GetContentDOMWindow(domwindow); domwindow.GetDocument(domdoc); domhtmldoc:= domdoc as nsIDOMHTMLDocument;
nsstr:= NewString; nsstr.Assign(htmlcode); domhtmldoc.Write(nsstr.AString); end;
voici à quoi ressemble le début de mon html avec le lien vers le css, et vers mes images :
<html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> <title>Marque</title> <base href="file://E:/Projets/Delphi/PaletteInfo.Essai/htdocs/"> <link rel="stylesheet" href="styles.css" type="text/css"> </head> <body> <table border="0" width="100%"> <tr class="marque"> <th colspan="2" class="marque">PL</th> </tr> <tr class="marque"> <td width="20%" class="marque">Immatric :</td> <td class="marqueValue">1665 ZK 14</td> </tr> <tr class="marque"> <td width="20%" class="marque">Numero :</td> <td class="marqueValue">0656</td> </tr> <tr class="marque"> <td width="20%" class="marque">Telephone !! :</td> <td class="marqueValue">+33679609649</td> </tr> <tr class="marque"> <td width="20%" class="marque">Etat :</td> <td class="marqueValue" style="background-color: #E4E9FF;"> <img src="img/repos.png">-Repos</td> </tr>
....
ce code fonctionnait sous IE... et le plus étrange, c'est que si je fais un TGeckoBrowser.LoadURI() avec en paramètre un fichier .html contenant le code html, cela fonctionne parfaitement. LoadURI ressemble à ceci :
procedure TGeckoBrowser.LoadURI(uri: WideString; loadFlags: Cardinal; referer: String; postData: String; headers: String); var webNavigation: nsIWebNavigation; refererURI: nsIURI; postPtr, headPtr: Pointer; postLen, headLen: Longword; postStream, headStream: nsIInputStream; dataStream:nsIStringInputStream; mimeStream:nsIMIMEInputStream; begin if not Supports(FWebBrowser, nsIWebNavigation, webNavigation) then Exit;
if Length(referer)>0 then begin NS_NewURI(refererURI,referer); end;
postLen := Length(postData); if postLen>0 then begin NS_CreateInstance('@mozilla.org/io/string-input stream;1',nsIStringInputStream,dataStream); dataStream.SetData(PChar(postData),postLen); NS_CreateInstance('@mozilla.org/network/mime-input-stream;1',nsIMIMEInputStream,mimeStream ); mimeStream.AddHeader(PChar('Content-Type'),PChar('application/x-www-form-urlencoded')); mimeStream.SetAddContentLength(true); mimeStream.SetData(dataStream); mimeStream.QueryInterface(nsIInputStream,postStream); end;
headLen := Length(headers); if headLen>0 then begin headPtr := nsMemory.Alloc(headLen); if Assigned(headPtr) then begin NS_MEMCPY(headPtr, PChar(headers), headLen); NS_NewByteArrayInputStream(headStream, headPtr, headLen); end; end;
webNavigation.LoadURI(PWideChar(uri), loadFlags, refererURI, postStream, headStream); end;
Ce qui m'embête dans ce dernier cas, c'est d'écrire un fichier html sur le disque à chaque fois, j'aurais préféré alimenté dynamiquement comme dans la première méthode LoadHTML...
quelqu'un pourrait il m'aider ?
je suis very newbee sur XPCom...
Merci pour toute aide. Christophe
Envoyé par : webmada
Date : 28/02/2010 14:40
Wow! Projet intéressant, c'est ce que je cherche à faire donc je ne peux pas t'aider mais j'encourage les experts pour t'aider
S O S
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.