AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Delphi Befehl als "Link" in TWebBrowser
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Befehl als "Link" in TWebBrowser

Ein Thema von Stewag · begonnen am 4. Okt 2022 · letzter Beitrag vom 5. Okt 2022
Antwort Antwort
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#1

Delphi Befehl als "Link" in TWebBrowser

  Alt 4. Okt 2022, 18:32
Ich möchte einen Link aus Platzgründen nicht innerhalb der TWebbrowser Instanz aufrufen, sondern mit dem Default Browser des (Android) Smartphones. Aus Delphi heraus geht das über TMisc.Open.

Wie kann ich diesen Befehl im HTML Code von TWebBrowser "verlinken"?
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi Befehl als "Link" in TWebBrowser

  Alt 4. Okt 2022, 18:38
Du möchtest also einem anderen Programm sagen, dass sie etwas von dir anzeigen (intent) soll, also deine URL (http) ?

Bei Google suchenandroid http intent

https://stackoverflow.com/questions/...n-specific-url


Wie man das aus dem internen Browser an einen externen gibt ... hmmmm

Bei Google suchenandroid open link external browser

irgendie kommt da das Gleiche raus. (auf Klick im internen Browser-Control reagieren und das dort im Delphi-Event dann machen)

Hätte vielleicht gedacht, dass es sowas wie das Target am <URL> gibt, also wenn man ein neues Fenster öffnen lassen will.
https://wiki.selfhtml.org/wiki/HTML/Attribute/target

Aber bestimmt gibt es auch eine spezielle URI, welche an den Standard-Browser weitergereicht wird? (mir fällt nur grade kein passender Suchbegriff dafür ein, mit dem ich sowas finde)
So wie das mailto: an das Standard-Mailprogramm.
Mit http: ginge es zwar, aber das fängt ja dein interner Browser schon ab und macht es selber.
$2B or not $2B

Geändert von himitsu ( 4. Okt 2022 um 18:51 Uhr)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi Befehl als "Link" in TWebBrowser

  Alt 5. Okt 2022, 09:34
Danke himitsu!
Die verschiedenen "target=" Optionen habe ich natürlich alle durchprobiert, damit funktioniert der Wechsel zum Default-Browser aber nicht.

<a href="https://google.com" onclick="window.open('https://google.com', '_system'); return false;">Google</a>
...klappt ebenfalls nicht.

Wie ich ein Intent statement in einem <a href= tag unterbringe, erschließt sich mir leider nicht
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi Befehl als "Link" in TWebBrowser

  Alt 5. Okt 2022, 09:46
Ich weiß nicht, wie das unter Android läuft, bzw. ob der TWebBrowser da anders ist als unter Windows. Dort gibt es zumindest das Event OnBeforeNavigate2. Darin könnte man dann etwas machen wie:
Delphi-Quellcode:
if AnsiStartsText('DELPHICOMMAND://', string(URL)) then begin
  Cancel := True;
  // "URL" ggf weiter parsen, Parameter auslesen, ...
  DoMyProcedure; // Oder was auch immer
end;
Im HTML hat man dann HRefs, die mit DELPHICOMMAND:// anfangen statt https:// ...
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi Befehl als "Link" in TWebBrowser

  Alt 5. Okt 2022, 10:02
OnShouldStartLoadWithRequest?

Allerdings:
* diese Seite der DP im Windows geladen
* der Selfhtml-Link öffnet sich extern im Edge (nicht in meinem Firefox ) und das ohne ein Event (OnShouldStartLoadWithRequest sowie OnTap)
* der Google-Link öffnet sich intern und löst OnShouldStartLoadWithRequest aus

Delphi-Quellcode:
procedure TForm11.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('https://www.delphipraxis.net/211564-delphi-befehl-als-link-twebbrowser.html#post1512852');
end;

procedure TForm11.WebBrowser1ShouldStartLoadWithRequest(ASender: TObject; const URL: string);
begin
  Memo1.Lines.Add(URL);
  if Pos('google', URL) > 0 then
    Abort; // hier könntest du "deinen" Link behandeln, also sonstwas machen
end;

procedure TForm11.WebBrowser1Tap(Sender: TObject; const Point: TPointF);
begin
  Memo1.Lines.Add('OnTap');
end;
Komisch ist aber, das immer nur der erste Klick auf einen Link funktioniert und das liegt nicht am Abort, denn auch der Link in den Edge geht nur einmal auf.
Und OnTap macht auch nichts.

[add]
Eigentlich ContainsText, aber hatte vorhin keine Lust hoch zu scrollen due SysUtils einzufügen.


[test]
himitsu:\\test

[edit2]
neee, himitsu: oder sonstwas geht auch ohne Event direkt an den Edge
$2B or not $2B

Geändert von himitsu ( 5. Okt 2022 um 10:08 Uhr)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi Befehl als "Link" in TWebBrowser

  Alt 5. Okt 2022, 11:33
OnBeforeNavigate gibt es in TWebBrowser unter Firemonkey nicht aber so hat es geklappt:

Code:
procedure TfSplash.WebBrowser1ShouldStartLoadWithRequest(ASender: TObject; const URL: string);
begin
  if Pos('widget', URL) > 0 then
  begin
    if FMain.CheckInternet('google.com') then
      TMisc.Open('https://play.google.com/store/apps/details.....')
    else
      showmessage('kein Internet!');
    Abort;
  end
end;
Danke Himitsu!
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:33 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