Autor |
Beitrag |
Flix
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 26.01.07 20:13
Hallo
Ich weiß nicht, was ich da falsch mache. Ich lade meinen HTML-Code in einen TStrings.
Diesen lasse ich dann in einen Memofeld ändern und parallel im TWebbrowser anzeigen. Läuft alles super. Auch alle externen links zu Webseiten im WWW werden problemlos angezeigt. Nur Links zu lokalen HTML-Dateien will mein Browser einfach nicht folgen.
Klar, könnte falschen Pfad haben, aber Bilder kann ich lokal ohne Probleme (relativ und abolut) addressieren. Über den <base>-Tag setze ich da einfch das entsprechende Verzeichnis. Die Bilder werden alle angezeigt.
Wenn ich nun auf einen lokalen Link drücke kommt entweder Fehler 404 oder erhängt für ein paar Sekunden und dann kann ich wieder weiterarbeiten ohne das sich die Seite geändert hat.
Ich habe schon alles probiert, ob mit oder ohne file://..., file:///..., localhost/..., relative Pfade, abolutePfade, nichts geht.
Bitte um Hilfe
Gruß
Flix
|
|
Roadrunner116
      
Beiträge: 89
Win XP Home, Ubuntu Linux 6.06
Delphi 7, Java, PHP
|
Verfasst: Fr 26.01.07 21:50
Ich würde gerne versuchen zu helfen, verstehe deine Frage aber leider nicht....
Gruß Roadrunner116
|
|
Flix 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 27.01.07 11:14
[quote=" Roadrunner116"]Ich würde gerne versuchen zu helfen, verstehe deine Frage aber leider nicht....
Tut mir leid, wenn ich mich unklar ausgedrückt habe, ich versuche es nochmal konkreter:
ich habe eine HTML-Seite "linkme.html" in einen Verzeichnis auf meinem Rechner. Des weiteren habe ich ein Delphiprogramm geschrieben, das in der Lage ist, einen in einem Memofeld eingegebenen HTML-Code, im Webbrowser von Delphi interpretiert erscheinen zu lassen.
Bsp:
Ich gebe im Memo: "Hallo<br>Ich bin da" ein und das ganze erscheint dann interpretiert im Webbrowser. Nun möchte ich einen Link in meinem HTML-Code einfügen und habe so folgende Zeile in meinem Memofeld:
"<a href="linkme.html"> Link me </a>"
Der Text "Link me" wird dann auch unterstrichen im Delphiwebbrowser ausgegeben, nur wenn ich auf diesen klicke, dann folgt er nicht den Link. Entwerder gibt er eine Fehlermeldung aus (Die Seite kann nicht angezeigt werden) oder er hängt kurz und macht ohne das er den Link folgt weiter.
Ich hoffe, dass jetzt mein Problem besser verstanden wurde.
Gruß Flix
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 27.01.07 14:54
Hallo,
die Basisadresse mitgeben, dann sollte es funktionieren:
Delphi-Quelltext 1:
| s := '<base href="c:/temp/test/"><a href="linkme.html"> Link me </a>'; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.01.07 15:57
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 27.01.07 16:11
Hallo,
nein, ist nicht erforderlich, das passt der Webbrowser an.
Ebenso kann man auch direkt ein Datei mit Navigate('c:/temp/test/linkme.html');laden.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Flix 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 27.01.07 16:37
Ich habe ja schon alles durchprobiert. Mit und ohne base-Tag, relativ und absolute Pfade. Es klappt nicht. Am Pfad sollte es auch nicht liegen, da Bilder angezeigt werden. Übergebt dem Browser mal einen TStrings und schreibt darin mal einen lokalen Link. Funktioniert das bei euch? Bei mir nicht. Vielleicht muss ich in irgendeiner Eigenschaft von TWebbrowser noch den neuen Pfad setzen oder die Datei eintragen?
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 28.01.07 02:07
Hallo,
hast recht, mit lokalen Links funktioniert es nicht, war mir noch nicht aufgefallen, da ich es immer nur für Images genutzt habe.
Warum speicherst Du den Inhalt des Memos vor der Anzeige denn nicht?
Damit könntest Du die Probleme vermeiden.
Abgesehen davon hier mal ein Workaround:
Angenommen zwei html-Dateien liegen vor,
im Ordner "c:\temp\test" die Datei "erste.html" mit folgendem Inhalt:
XML-Daten 1: 2: 3:
| <b>Erste Lokale Datei</b><br> <a href="../zweite.html">nächste lokale Datei</a><br> <a href="http://www.google.de">Google</a><br> |
im Ordner "c:\temp" die Datei "zweite.html" mit folgendem Inhalt:
XML-Daten 1: 2:
| <b>Zweite Lokale Datei</b><br> <a href="test/linkme.html"> Zurück zur Ersten</a> |
Ins Memo den HTML-Quelltext:
Delphi-Quelltext 1: 2:
| Memo1.Lines.Add('<b>Aus String erstellt</b><br>'); Memo1.Lines.Add('<a href="erste.html"> Zur ersten lokalen Datei </a><br>'); |
Den HTML-Code aus dem Memo über einen Stream in den WebBrowser laden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure WB_LoadHTMLFromList(WebBrowser: TWebBrowser; HTMLCode: TStrings); var ms: TMemoryStream; flag : Olevariant; begin flag := 0; WebBrowser.Navigate('about:blank', flag,flag,flag,flag); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
if Assigned(WebBrowser.Document) then begin ms := TMemoryStream.Create; try HTMLCode.SaveToStream(ms); ms.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); finally ms.Free; end; end; end; |
Aufruf:
Delphi-Quelltext 1:
| WB_LoadHTMLFromList(WebBrowser1,Memo1.Lines); |
- nach dem Aufruf WB_LoadHTMLFromList enthält URL den String 'about:blank'
- klickt der User auf einen lokalen Link enthält URL z.B 'about:blankerste.html'
Darauf dann reagieren in OnBeforeNavigate2;
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin If (Length(URL) > 11) and (Pos('about:blank',URL) = 1) then begin Cancel := True; WebBrowser1.Navigate('c:/temp/test/'+Copy(URL,12,MAXINT),Flags,Flags,Flags,Flags); end; end; |
Das funktioniert bei mir.
Wenn Dir noch eine andere Lösung über den Weg läuft, immer her damit 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Flix 
Hält's aus hier
Beiträge: 11
|
Verfasst: So 28.01.07 12:34
Danke für die Antwort, aber es funktioniert nicht. Er geht erst gar nicht in TForm1.WebBrowser1BeforeNavigate2 rein! Ich setzte da ein Editfeld um die übergebene URL anzeigen zu lassen und dieses bleibt leer. Nur wenn ich "file://" davor benutzt
Bsp: <a href="file://linkme.html"> Link me </a><br>
dann geht er in TForm1.WebBrowser1BeforeNavigate2. Allerdings navigieren tut er da auch nicht richtig. Dann baut der Browser lediglich eine leere Seite auf.
Gruß
Flix
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 28.01.07 16:01
Hallo,
also, wie bereits gesagt, bei mir funktioniert es.
Warum das bei Dir nicht funktioniert, kA
Wie lädst Du den HTML-Quelltext, mit einem Stream?
Hast Du mal versucht meinen Vorschlag in ein neues Projekt einzubauen?
Setz doch mal ein zusätzliches Memo auf Deine Form und lass Dir innerhalb OnBeforeNavigate2 die URL ausgeben.
Eventuell kannst Du ja auch mal Deine relevanten Codeabschnitte hier reinstellen.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Flix 
Hält's aus hier
Beiträge: 11
|
Verfasst: So 28.01.07 16:56
Titel: Problemverschiebung: <base> und lokale Links
Ich habe nun das Problem weiter einkreisen können. Es liegt am <base>-Tag.
Damit ich Bilder angezeigt bekomme, setze ich am Anfang immer folgenden Tag:
<base href="c:\meinpfad\...">
Benutzte ich nicht den <base>-Tag, so kann ich lokalen Links folgen. Es ist aber keine gute Alternative entweder Bilder oder Links setzen zu können.
Vielleicht hat jemand eine Idee.
Flix
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 28.01.07 17:33
Hallo,
lass doch den base-Tag weg und füge, vor dem Laden des Quelltextes in den Webbrowser, in den img-Tag den absoluten Pfad ein. Nimmst Du dann meinen Workaround funktionieren die Img-Tags in den verlinkten Dateien normal.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Flix 
Hält's aus hier
Beiträge: 11
|
Verfasst: So 28.01.07 21:10
Titel: lokale Links im Webbrowser
Danke für die Hilfe, ich habe das Problem gelöst.
Die internen Links haben Aufgrund des <base>-Tags nicht funktioniert. (warum auch immer) Mit dem <base>-Tag habe ich den Hauptpfad gesetzt, damit ich alle Bilder anzeigen lassen kann.
Ich habe nun das Programm so umgeschrieben, dass alle relativen Pfade (auch der der Bilder) durch absolute ersetzt werden. So konnte ich auf den <base>-Tag verzichten und alles läuft.
Bleibt offen, warum der <base>-Tag die
<a href="lokalerPfad/bla.html"> lahmlegt.
Gruß
Flix
|
|
|