AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webbrowser Html-code nach dem Laden vor dem Anzeigen ändern.
Thema durchsuchen
Ansicht
Themen-Optionen

Webbrowser Html-code nach dem Laden vor dem Anzeigen ändern.

Ein Thema von Pichel · begonnen am 9. Apr 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

Webbrowser Html-code nach dem Laden vor dem Anzeigen ändern.

  Alt 9. Apr 2006, 15:25
Hi.

Habe zwar schon viel gesucht aber leider keine schlüssige Lösung gefunden.

Ich möchte gerne eine Seite in den Webbrowser laden (klar per .navigate) und bevor der Webbrowser diese anzeigt den Quelltext verändern, vermutlich muß dies im onDocumentComplete erfolgen aber ganz sicher bin ich mir da auch nicht.

Konkret soll also <marquee scrollamount="4">......</marquee> entfernt und gar nicht ausgeführt werden.

Dieser Tag bremst die ganz App irgendwie aus denn wenn die Seite geladen ist, steht alles für ca 800ms bis die Laufschrift anfängt zu laufen....

Danke für Eure Hilfe.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 9. Apr 2006, 15:47
Hi.

Vielleicht kommst du hiermit zurecht?

Delphi-Quellcode:
procedure DropElement(doc: IHTMLDocument3; tagName: String);
var
  i: Integer;
  ec: IHTMLElementCollection;
  e: IHTMLElement;
begin
  ec := doc.getElementsByTagName(tagName);
  for i := Pred(ec.Length) downto 0 do
  begin
    e := ec.item(i, 0) as IHTMLElement;
    e.outerHTML := '';
  end;
end;

procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  wb: IWebBrowser;
begin
  if Succeeded(pDisp.QueryInterface(IID_IWebBrowser, wb)) then
    DropElement(wb.Document as IHTMLDocument3, 'marquee');
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#3

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 9. Apr 2006, 17:38
Zitat von marabu:
Vielleicht kommst du hiermit zurecht?
Yep.. bezüglich der Anzeige ist in dem Fall der marquee jetzt weg... allerdings wenn man sich den quelltext noch anzeigen lässt ist er noch im Quelltext vorhanden.

Irgendwie habe ich aber immer noch das Problem das die App dann nen Moment hängt...

[09.Apr 18:33:02.762] geladen: http://www.irgendwas.de
[09.Apr 18:33:05.115] DoPage GetHtmlCode
[09.Apr 18:33:06.868] DoPage CheckNewMsg
und dann läuft es wieder flüssig

OnDocumentComplete wird um 18:33:02.762 geschrieben.
um 18:33:05.115 wird GetHTMLCode begonnen und ist erst um 18:33:06.868 fertig. Dauert das wirklich immer 1,5sek?

Der folgende Code braucht 1,5Sek??? Any hint..

Delphi-Quellcode:
function myGetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var ps : IPersistStreamInit;
    ss : TStringStream;
    sa : IStream;
    s : string;
begin
  Result := False;
  if not Assigned(WebBrowser.Document) then Exit;
  ps := WebBrowser.Document as IPersistStreamInit;
  s := '';
  ss := TStringStream.Create(s);
  try
    sa := TStreamAdapter.Create(ss, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
    if Result then begin
      ACode.Clear;
      ACode.Add(ss.Datastring);
    end;
  finally
    ss.Free;
  end;
end;
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 9. Apr 2006, 17:55
Bei mir werden 20 msec ausgewiesen:

Delphi-Quellcode:
function myGetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var
  ps : IPersistStreamInit;
  ss : TStringStream;
  sa : IStream;
  s : string;
begin
  Result := False;
  if not Assigned(WebBrowser.Document) then Exit;
  ps := WebBrowser.Document as IPersistStreamInit;
  s := '';
  ss := TStringStream.Create(s);
  try
    sa := TStreamAdapter.Create(ss, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
    if Result then
      with ACode do
      begin
        BeginUpdate;
        Text := ss.Datastring;
        EndUpdate;
      end;
  finally
    ss.Free;
  end;
end;

procedure TDemoForm.tbnExtractClick(Sender: TObject);
var
  s: TStrings;
  tc: Cardinal;
begin
  s := TStringList.Create;
  tc := GetTickCount;
  myGetHtmlCode(WebBrowser, s);
  tc := GetTickCount - tc;
  s.Free;
  ShowMessage(Format('%.0n', [1.0 * tc]));
end;

procedure TDemoForm.tbnLoadClick(Sender: TObject);
begin
  with WebBrowser do
    Navigate('http://de.wikipedia.org');
end;
marabu
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 21. Jun 2006, 19:33
Hi,

ich habe zur Zeit das gleich Ziel, nämlich den HTML-Code vor dem anzeigen zu verändern. Allerdings kennt Delphi bei mir die IHTML*-Typen nicht. Auch in der OH stehen diese nicht drin. Kann mir einer sagen, aus welchen Units die kommen?

Außerdem würde mich mal interessieren, welche Objekte sich unterhalb von TWebBrowser.OleObject.Document befinden. Bis jetzt habe ich nämlich zB noch nicht die Möglichkeit gefunden, den kompletten HTML-Code (inkl head) zu bekommen oder auch nur head. Gibt es da Möglichkeiten, die Objekte irgendwie alle auszulesen oder gibt es irgendwo fertige Listen?

Gruß,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 21. Jun 2006, 20:35
Hallo Chris,

die HTML-Interfaces findest du in der Unit MSHTML. Da es sich dabei nur um einen Wrapper für die MSHTML type library handelt, wirst du in der Delphi OH nicht fündig. Du musst im MS Windows Platform SDK und dort im Kapitel MSHTML Reference nachlesen oder in der MSDN Online Library.

Den kompletten Quelltext deines HTML-Dokumentes kannst du auf verschiedene Weisen erhalten. Eine weitere Möglichkeit wäre diese:

ShowMessage(WebBrowser.OleObject.Document.body.parentElement.outerHTML); Grüße vom marabu
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 22. Jun 2006, 15:03
Jo, danke, das hat geholfen =)
Aber da kommt jetzt noch eine Frage auf: Bei der Methode wird ja erst gewartet, bis die komplette Seite inklusive aller Objekte (Grafiken, Sounds, Embedded Flash etc) geladen sind und erst danach wird der unnötige HTML-Code rausgeschmissen. Gibt es eine Möglichkeit, erst quasi nur den HTML-Code zu laden und zu filtern, so dass dann nur noch die Objekte geladen werden, die dann auch noch angezeigt werden?

Gruß,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 22. Jun 2006, 18:21
Natürlich geht das. Du musst zuerst das HTML-Dokument laden ohne es zu rendern. Dann verfütterst du es an den HTML Parser und entfernst unerwünschte Teile. Das abgespeckte Dokument lässt du anschließend vom Browser rendern. Code zum Ausschlachten findest du beispielsweise hier: klick

marabu
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 22. Jun 2006, 19:17
Ich glaub den Code da hab ich prinzipiell verstanden ... nur: Wie übergebe ich das Ergebnis des ganzen dem TWebBrowser? (also, dass IHTMLDocument2?)

Alloc
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Webbrowser Html-code nach dem Laden vor dem Anzeigen änd

  Alt 22. Jun 2006, 19:31
Hier noch ein Puzzle-Teil:

Delphi-Quellcode:
function SaveDocument(doc: IDispatch; const s: TStream): Boolean;
var
  ps: IPersistStreamInit;
  sa: IStream;
begin
  if Succeeded(doc.QueryInterface(IPersistStreamInit, ps)) then
  begin
    sa := TStreamAdapter.Create(s, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, true));
  end;
end;
Wenn du es geschickt einsetzt, dann ist dein Problem gelöst.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz