Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# TGeckoBrowser XPCOM , perte de lien css, et img

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

# Re: TGeckoBrowser XPCOM , perte de lien css, et img

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.