Autor Beitrag
Flix
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 89

Win XP Home, Ubuntu Linux 6.06
Delphi 7, Java, PHP
BeitragVerfasst: Fr 26.01.07 21:50 
Ich würde gerne versuchen zu helfen, verstehe deine Frage aber leider nicht....

Gruß Roadrunner116
Flix Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Sa 27.01.07 11:14 
[quote="user profile iconRoadrunner116"]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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 27.01.07 14:54 
Hallo,

die Basisadresse mitgeben, dann sollte es funktionieren:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 27.01.07 15:57 
Nicht eher so?
ausblenden Delphi-Quelltext
1:
s := '<base href="file:///c:/temp/test/"><a href="linkme.html"> Link me </a>';					

oder direkt im Link den Pfad:
ausblenden Delphi-Quelltext
1:
s := '<a href="file:///c:/temp/test/linkme.html"> Link me </a>';					
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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:
ausblenden 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:
ausblenden 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(00);
        (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    end;
end;


Aufruf:
ausblenden 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;
ausblenden 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) > 11and
     (Pos('about:blank',URL) = 1then
     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 :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Flix Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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