Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Werte an geklickten Links im Browser anhängen (https://www.delphipraxis.net/108915-werte-geklickten-links-im-browser-anhaengen.html)

ptown67 21. Feb 2008 03:38


Werte an geklickten Links im Browser anhängen
 
moin leute!

ich hab mal hier im forum etwas gesucht, aber anscheinend ist es ein eher seltenes problem. ich programmiere zur zeit an einem browser, speziell für ein forum. auf dem programm ist z.b. ein button für 'startseite'. wenn dieser angeklickt wird, dann wird der link vom forum aufgerufen, plus eine variable, damit das forum eine spezielle ansicht für meinen browser wiedergibt.

beispiel:

Delphi-Quellcode:
ansicht:='?view=speziellerbrowser';
browser.navigate('http://www.forum.de/'+ansicht);
klappt alles bestens. jedoch aber nur wenn meine buttons angeklickt werden. klickt man auf einen link innerhalb des browsers, also keinen meiner buttons, dann fehlt der wert 'ansicht' und die normale version des forums wird angezeigt.

wie kann ich an einen link etwas anhängen?

ich bin jeder antwort sehr dankbar...

viele grüße fmb ;)

o0o 21. Feb 2008 06:54

Re: Werte an geklickten Links im Browser anhängen
 
hmm sry kann dir jetzt keine antwort auf dein prob geben da ich das genaue problem nichtso ganz verstehe...kannst nichtmal einen link zu deinem forum posten dass koennte ich dir vllcht mehr helfen;)

da o0o

ptown67 21. Feb 2008 07:19

Re: Werte an geklickten Links im Browser anhängen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie gesagt, wenn man Buttons klickt, oder einen Link vom Menü aufruft funktioniert es, da das Forum dann meinen Wert '?view=pt' erkennt und dann eine spezielle Ansicht angezeigt wird, die der Admin für mich eingerichtet hat. Der Banner wird z. B. dann nicht mehr eingeblendet, da dieser bereits oben auf dem Browser ist.

Ich möchte aber auch, dass der Wert '?view=pt' an einen Link angehängt wird, der nicht in meinem Programm sitzt, sondern auf der Website, die im WebBrowser angezeigt wird.

Hier das Programm, damit jeder genau versteht, was ich meine:
(Es handelt sich um einen WAP-Browser für 'wap.se-world.info')

PS: Ich nutze den EmbeddedWebBrowser von www.bsalsa.com

o0o 21. Feb 2008 07:43

Re: Werte an geklickten Links im Browser anhängen
 
also wenn ich das jetzt richtig verstanden habe...du willst an alle links ein wenig text dranhaengen um es simple auszudruecken?

wenn es so ist wird es nicht schwer;)

hier bei den schweizern is ein schnipsel der alle links aus dem browser holt:
http://www.swissdelphicenter.ch/de/showcode.php?id=479

wenn du alle links hast musst du nur noch an jedes link deinen code haengen und den rest kannst du dir dann ausmalen oder?^^

da o0o

API 21. Feb 2008 08:05

Re: Werte an geklickten Links im Browser anhängen
 
Delphi-Quellcode:
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
CONST
  FORUM_URL = 'http://www. ....';
  ANSICHT = '.........';
begin
 if copy(url,1,length(FORUM_URL)) = FORUM_URL then
  if pos(ANSICHT, URL) = 0 then
  begin
   Cancel := True;
   URL := URL + ANSICHT;
   WebBrowser1.Navigate(URL);
  end;
end;

toms 21. Feb 2008 08:10

Re: Werte an geklickten Links im Browser anhängen
 
Kleine Anmerkung zum Browser: Unter TEmbeddedWB.UserInterfaceOptions könntest du noch
EnableThemes auf True setzen, damit die Buttons etc. im XP/Vista Style angezeigt werden.

ptown67 21. Feb 2008 08:37

Re: Werte an geklickten Links im Browser anhängen
 
Erst mal vielen Dank für die Antworten!

Noch befor ich Eure Beiträge gelesen hatte, bin ich selbst schon auf 'BeforeNavigate2' gestossen...
Habe das Code-Beispiel von API ausprobiert. Es wird zwar fehlerfrei compilerd, aber mein Wert '?view=pt' wird leider immer noch nicht an die URLs angehänt.

Nun habe ich einfach mal folgendes ausprobiert:

Delphi-Quellcode:
procedure TFrameBrowser.BrowserBeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
Browser.Navigate(URL+'?view=pt');
end;
Nun erhalte ich aber bei Programmstart den Fehler 'Stack-Überlauf'. Das Programm startet zwar dann, stürzt aber ab, wenn ich irgend einen Link anklicke... :(

Xong 21. Feb 2008 08:46

Re: Werte an geklickten Links im Browser anhängen
 
Ich finde, du gehst das Problem von der falschen Seite an.
Normalerweise schickt ein Browser seine Kennung im "User-Agent"-Header.

Auf diesen sollte die Internetseite reagieren.

API 21. Feb 2008 08:51

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von freeman.bytes
Nun habe ich einfach mal folgendes ausprobiert:

Delphi-Quellcode:
procedure TFrameBrowser.BrowserBeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
Browser.Navigate(URL+'?view=pt');
end;

1. Du hast meinen Code "schlecht kopiert"

2. Wenn du .Navigate im BeforeNavigate2 aufrufst, wird BeforeNavigate2 immer wieder aufgerufen und es gibt einen 'Stack-Überlauf'.

3. '?view=pt' musst du ja nur dann anhängen, wenn der string in URL nicht vorkommt.

4. Setze noch Cancel auf True

5. Wenn Bedingung 3 erfüllt ist, dann gibt's das Problem von 2 nicht.

API 21. Feb 2008 08:52

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von Xong
Ich finde, du gehst das Problem von der falschen Seite an.
Normalerweise schickt ein Browser seine Kennung im "User-Agent"-Header.

Auf diesen sollte die Internetseite reagieren.

Sein Problem hat doch nichts mit dem "User-Agent" zu tun?!?

marabu 21. Feb 2008 08:52

Re: Werte an geklickten Links im Browser anhängen
 
Hallo,

der Stack-Überlauf entsteht, weil du weder die laufende Navigation beendest, noch ein Exit-Kriterium für die Beendung des rekursiven Aufrufs deines event handlers festlegst. Schau dir den Code von API nochmal genau daraufhin an.

Freundliche Grüße

ptown67 21. Feb 2008 09:33

Re: Werte an geklickten Links im Browser anhängen
 
Liste der Anhänge anzeigen (Anzahl: 1)
leider ist es immer noch so, dass nur die internen button den wert wiedergeben...

ich habe mal dazu ein test-projekt zusammengestellt:

Xong 21. Feb 2008 09:39

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von API
Sein Problem hat doch nichts mit dem "User-Agent" zu tun?!?

So wie er es angeht nicht!
Deswegen habe ich ja auch gemeint, dass er es falsch angeht.

API 21. Feb 2008 09:39

Re: Werte an geklickten Links im Browser anhängen
 
Ich denke es hat ein "/" zu viel in der URL

Delphi-Quellcode:
 Browser.Navigate(URL); // ---> [url]http://wap.se-world.info/?view=pt[/url]

API 21. Feb 2008 09:42

Re: Werte an geklickten Links im Browser anhängen
 
mach's mal so:

Delphi-Quellcode:
   Cancel := True;
   if Copy(URL,Length(URL),1) = '/' then
     URL := Copy(URL, 1, Length(URL)-1);
   URL := URL + ANSICHT;
   Browser.Navigate(URL);

Xong 21. Feb 2008 09:43

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von API
Ich denke es hat ein "/" zu viel in der URL

Delphi-Quellcode:
 Browser.Navigate(URL); // ---> [url]http://wap.se-world.info/?view=pt[/url]

Ich will mich ja nicht mit dir streiten :stupid: , aber: Wo denn?

API 21. Feb 2008 09:45

Re: Werte an geklickten Links im Browser anhängen
 
info/?

Xong 21. Feb 2008 09:54

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von API
info/?

Ist aber ein korrekter URI. =)

ptown67 21. Feb 2008 10:21

Re: Werte an geklickten Links im Browser anhängen
 
Nochmals danke API!

Hat zwar leider immer noch nicht geklappt, denn es gab wieder den 'Stack-Überlauf' aus.

Ich werd mir jetzt mal ein Label dazu erstellen, dass nach einem klick immer URL anzeigen lassen, damit ich den Fehler leichter finden kann. Leider bin ich nur Anfänger im Bereich Delphi...

Aber ich bin mir sicher, dass ich eine Lösung finde. Muss heut abend mal mit dem Admin reden...

-----------------------------------------------------------------------------

Zitat:

Ich finde, du gehst das Problem von der falschen Seite an.
Normalerweise schickt ein Browser seine Kennung im "User-Agent"-Header.

Auf diesen sollte die Internetseite reagieren.
Das haben wir schon versucht. Ich müsste den kompletten String ändern können.

ptown67 21. Feb 2008 11:15

Re: Werte an geklickten Links im Browser anhängen
 
super, ich habe es zu teil hinbekommen!

Delphi-Quellcode:
procedure TForm1.BrowserBeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
CONST
  ANSICHT = '?view=pt';
begin
if pos(ANSICHT, URL) = 0 then
  begin
    Cancel := True;
    URL := URL + ANSICHT;
    Label1.Caption:=URL;
    Browser.Navigate(URL);
  end;
end;
jedoch gibt es ja auch links im forum, wie z.b. diesen hier:
http://wap.se-world.info/board.php?boardid=114

da steht bereits ein wert der nach dem '?' kommt. in dem fall muss ich dafür dann ein '&view=pt' anhängen statt '?view=pt'.

jetzt muss ich nur noch herausfinden, wie ich es anstelle, dass wenn ein ? erkannt wird, dass er dann '&view=pt' statt '?view=pt' einsetzt.

aber fürs erste bin ich schon mal erleichtert.

API 21. Feb 2008 11:28

Re: Werte an geklickten Links im Browser anhängen
 
Zitat:

Zitat von freeman.bytes
jetzt muss ich nur noch herausfinden, wie ich es anstelle, dass wenn ein ? erkannt wird, dass er dann '&view=pt' statt '?view=pt' einsetzt.

Delphi-Quellcode:
CONST
  ANSICHT1 = '?view=pt';
  ANSICHT2 = '&view=pt';

if Pos('?', URL ) = 0 then // kein ? in der URL gefunden
  URL := URL + ANSICHT1
else
  URL := URL + ANSICHT2

ptown67 21. Feb 2008 11:58

Re: Werte an geklickten Links im Browser anhängen
 
danke! danke! ich komme immer näher ans ziel. jetzt muss ich nur noch am login was verbessern, aber das wird nun sicher kein problem sein. am besten extra mit 'if'.

ohne dich API, hätte ich das nicht so hinbekommen. wenn das tool fertig ist, steht dein name unter danksagung im about-feld ;)

viele grüße ;)

ptown67 21. Feb 2008 19:17

Re: Werte an geklickten Links im Browser anhängen
 
servus!

durch diesen befehl kann ich ja feststellen, dass kein '?' im link enthalten ist:

Delphi-Quellcode:
if Pos('?', URL ) = 0 then // kein ? in der URL gefunden
URL := URL + ANSICHT1
aber wie mache ich es umgekehrt? nehme ich dann statt der '0' eine '1'? (wenn ein '?' vorhanden, dan....) oder gibt es dafür einen ganz anderen befehl?

gruß ;)

mkinzler 21. Feb 2008 19:19

Re: Werte an geklickten Links im Browser anhängen
 
Überprüfe auf > 0

ptown67 21. Feb 2008 21:37

Re: Werte an geklickten Links im Browser anhängen
 
servus mkinzler!

danke für deinen tipp. es scheint zwar zu funktionieren, aber so wie es aussieht nähert sich dieses projekt dem ende zu...

ich habe vorhin mir meinem admin gequatscht, der es einfacher hat von seiner seite aus, ein paar änderungen vorzuehmen, wodurch dann die genannte probleme behoben werden.

ich bin wirklich sehr erleichtert... ;)

viele grüße ;)

ECHT TOP FORUM HIER! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz