Laden...

WebView2: Angeklickten Link abfangen/auswerten

Letzter Beitrag vor 5 Tagen 4 Posts 444 Views
WebView2: Angeklickten Link abfangen/auswerten

Hallo zusammen,

ich steh mir wahrscheinlich grad mal wieder selber im Weg...

Lange Vorgeschichte:

  • Wir haben nen ERP (WinForms, Clientbasiert), an dem man so einiges customizen kann.
  • Unter Anderem kann man da sogenannte Infoscreens erstellen, die sich in den Modulen in der Oberfläche beliebig einhängen lassen. Diese Infoscreens sind quasi dynamische HTML-Seiten, aber technologisch ne Mischung aus VB-Script, VBA (die Älteren erinnern sich vielleicht noch...) und HTML/CSS. Gruselig zu entwickeln, weil alles in einem Textblock stecken muss, keine fertigen Komponenten nutzbar sind, etc. Geht irgendwie, aber vom Aufwand her zum Ergebnis einfach bäh. Zumal HTML/CSS auch eingeschränkt ist, da das Ganze dann im ERP auf dem guten, alten Browsercontrol auf IE7-Basis läuft. Das wird gleich noch wichtig: Ausführung der Scripte war komplett lokal am Client.
  • In diesem Konstrukt konnte man aber Links auf andere Datenobjekte im ERP aufbauen (Logikbeispiel: ERP://contact=12345). Das Ganze funktioniert auch aus anderen Apps heraus (HTML-Mails, etc.), da der Handler auch im System registriert ist. Entscheidender Punkt: Innerhalb der Darstellung im ERP fängt das jetzige Browsercontrol die angeklickten Links ab und öffnet das passende Modul samt Datensatz.
  • Nachdem ich nun ne Weile mit Blazor unterwegs bin kam die Idee auf, ob man das nicht darüber abfackeln könnte. Entsprechende Seiten zu bauen ist kein Problem, parametrisierter Aufruf auch nicht. Knackpunkt: Das alte Browsercontrol kann den Kram nicht mehr sauber darstellen. Meistens machen die JavaScript-Teile Probleme.
  • Lösungsansatz: Man kann auch net-basierte Plugins/Usercontrols in die ERP-Oberfläche einbinden. Also nen Plugin mit WebView2 gebaut und dem ganzen untergeschoben. Funktioniert soweit super! Alles wird sauber dargestellt. Aber wir nähern uns dem eigentlichen Problem...

Kurze Frage:

Die Blazor-Seiten laufen ja aufm Server, der Client (hier im lokalen ERP-Plugin) stellt nur dar. Wenn nun in den Seiten einer der oben beschriebenen Links auf eines der anderen Datenobjekte angeklickt wird, dann würde die Blazor-Seite das ja an den Server schicken, wo mir das nichts nützt. Ich brauche die Info  lokal am Client, um dort das andere Objekt aufzurufen. Den Objektaufruf dem ERP unterschieben ist kein Problem. Aber wie komme ich beim WebView2-Control an die Info, dass da ein Link aufgerufen wurde und welcher?

Danke schon mal für sachdienliche Hinweise?

VG Uwe

Sollte des nicht mit NavigationStarting umsetzbar sein (Quelle). Der Nutzer klickt auf den Link, du  redirectest die URL oder brichst ab oder was auch immer.

Mit freundlichen Grüßen
lutzeslife

Oh mann, war gestern dann doch wahrscheinlich zu lange... Das sieht genau nach dem aus, was ich suche. Drei mal über die Events gelunzt, drei mal übersehen...

Danke.

VG Uwe

Kleine Ergänzung: Damit lässt sich das umsetzen, was ich machen wollte.

Zwei Hinweise, falls das mal jemand findet und ähnlich nutzen will:

  • webView.NavigationStarting wird auch aufgerufen, wenn man via webView.Source eine URL aufruft. Wenn man in NavigationStarting das Navigieren via e.Cancel = True abwürgt sollte man auf die aufgerufene URL prüfen, sonst sägt man sich selbst wieder ab.
  • Wenn man URLs mit neuen Fenstern als Ziel aufruft (<a href='{url}' target='_blank'>), dann greift NavigationStarting nicht, da die Instanzierung eines neuen Fensters offensichtlich direkt erfolgt und NavigationStarting in der aktuellen webView-Instanz garnicht erst angesteuert wird.