Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Delphi Befehl als "Link" in TWebBrowser (https://www.delphipraxis.net/211564-delphi-befehl-als-link-twebbrowser.html)

Stewag 4. Okt 2022 17:32

Delphi Befehl als "Link" in TWebBrowser
 
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"?

himitsu 4. Okt 2022 17:38

AW: Delphi Befehl als "Link" in TWebBrowser
 
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. :stupid:

Stewag 5. Okt 2022 08:34

AW: Delphi Befehl als "Link" in TWebBrowser
 
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:(

Gausi 5. Okt 2022 08:46

AW: Delphi Befehl als "Link" in TWebBrowser
 
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:// ...

himitsu 5. Okt 2022 09:02

AW: Delphi Befehl als "Link" in TWebBrowser
 
OnShouldStartLoadWithRequest?

Allerdings:
* diese Seite der DP im Windows geladen
* der Selfhtml-Link öffnet sich extern im Edge (nicht in meinem Firefox :evil:) 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. :gruebel:
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 :shock:

Stewag 5. Okt 2022 10:33

AW: Delphi Befehl als "Link" in TWebBrowser
 
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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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