Einzelnen Beitrag anzeigen

wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#1

Handling von zufällig auftretenden POPUP Windows im TWEbBowser.

  Alt 20. Aug 2024, 07:28
Hi
Ich habe mit Delphi 10.1 Berlin eine Anwendung, die mir autom. eine Website bedient.
Dazu habe ich WebView Komponetene mir gekauft.
Doch wie kann ich die zufällig getriggerten POPUPs von der Website, die ja berechtigt sind, wegklicken?
Dazu folgendes:

Für Delphi 10.1 Berlin gibt es mehrere Alternativen zur `SHDocVw`-Einheit, die für die Arbeit mit Webbrowser-Komponenten verwendet werden können. Hier sind einige Optionen:

1. **FMX.WebBrowser**: Diese Komponente ist Teil des FireMonkey-Frameworks und kann verwendet werden, um Webinhalte in einer Delphi-Anwendung anzuzeigen. Sie bietet grundlegende Funktionen zur Anzeige von Webseiten und ist plattformübergreifend einsetzbar, was sie besonders für mobile Anwendungen geeignet macht[4].

2. **HTML Component Library**: Diese Bibliothek bietet eine native HTML-Rendering-Engine für Delphi und Lazarus. Sie ermöglicht die Integration von HTML/CSS-Funktionalitäten in Desktop-Anwendungen und bietet Unterstützung für moderne Webtechnologien[6].

3. **CEF4Delphi**: Diese Komponente basiert auf dem Chromium Embedded Framework (CEF) und ermöglicht die Integration eines vollständigen Chromium-basierten Webbrowsers in Delphi-Anwendungen. Sie bietet umfangreiche Unterstützung für moderne Webstandards und ist eine leistungsstarke Alternative zur Verwendung von Internet Explorer-basierten Komponenten wie `SHDocVw`.

4. **TMS FNC UI Pack**: Diese Sammlung von UI-Komponenten bietet ebenfalls eine Webbrowser-Komponente, die plattformübergreifend verwendet werden kann. Sie ist Teil eines größeren Pakets von UI-Komponenten, die in verschiedenen Delphi-Umgebungen eingesetzt werden können.

Diese Alternativen bieten unterschiedliche Funktionalitäten und können je nach spezifischen Anforderungen der Anwendung ausgewählt werden. Sie bieten moderne und oft plattformübergreifende Lösungen im Vergleich zur traditionellen `SHDocVw`-Einheit.

Citations:
[1] https://docwiki.embarcadero.com/RADS...und_Android%29
[2] https://stackoverflow.com/questions/...elphi-active-x
[3] https://www.cryer.co.uk/brian/delphi...fnfSHDocVw.htm
[4] http://docwiki.embarcadero.com/Libra...er.TWebBrowser
[5] https://docwiki.embarcadero.com/Libr...r.OnNewWindow2
[6] https://delphihtmlcomponents.com
[7] https://github.com/Fr0sT-Brutal/awesome-pascal
[8] https://www.delphientwickler.de/comp...id=101&catid=8

Zu SHDocVw gibt's diese INFOs: https://docwiki.embarcadero.com/Libr...r.OnNewWindow2

Und hat wer mit Delphi 10.1 dazu schon mal was realisiert?
Leider wird von der gewünschten WEBSITE kein IE7 mehr unterstützt sondern ich muss auf TWEbView von der kommerziellen Unit umsteigen.

Um die `SHDocVw`-Einheit in Delphi 10.1 Berlin zu nutzen, müssen Sie die `TWebBrowser`-Komponente verwenden, die auf die Webbrowser-Funktionen der Microsoft Shell Doc Object and Control Library (SHDOCVW.DLL) zugreift. Hier sind die Schritte, um diese Einheit in Ihrer Delphi-Anwendung zu verwenden:

### Schritte zur Nutzung von SHDocVw in Delphi 10.1

1. **Projekt erstellen**: Erstellen Sie ein neues VCL-Formularprojekt in Delphi.

2. **Komponente hinzufügen**: Fügen Sie die `TWebBrowser`-Komponente zu Ihrem Formular hinzu. Diese Komponente befindet sich in der Internet-Tool-Palette.

3. **SHDocVw in der Uses-Klausel**: Stellen Sie sicher, dass `SHDocVw` in der Uses-Klausel Ihrer Unit deklariert ist. Dies kann automatisch geschehen, wenn Sie die `TWebBrowser`-Komponente auf Ihr Formular ziehen.


Delphi-Quellcode:
   uses
     ..., SHDocVw;

4. **Webseite laden**: Verwenden Sie die `Navigate`-Methode der `TWebBrowser`-Komponente, um eine Webseite zu laden.

Delphi-Quellcode:
 procedure TForm1.Button1Click(Sender: TObject);
   begin
     WebBrowser1.Navigate('https://www.example.com');
   end;

5. **Ereignisse behandeln**: Sie können verschiedene Ereignisse der `TWebBrowser`-Komponente behandeln, wie z.B. `OnNavigateComplete2` oder `OnNewWindow2`, um auf Navigationen oder das Öffnen neuer Fenster zu reagieren[3].

### Fehlerbehebung


- **Fehlende Dateien**: Wenn Sie den Fehler "File not found: 'SHDocVw.dcu'" erhalten, könnte es daran liegen, dass die entsprechende Datei nicht auf Ihrem System vorhanden ist. In diesem Fall können Sie die `SHDocVw_TLB`-Einheit verwenden, die generiert wird, wenn Sie die Microsoft Internet Control ActiveX-Komponente importieren[6].

- **Kompatibilität**: Beachten Sie, dass `TWebBrowser` standardmäßig im IE7-Standards-Modus arbeitet, selbst wenn neuere Versionen von Internet Explorer installiert sind. Sie können den Browser-Emulationsmodus durch einen Eintrag in der Windows-Registry ändern, um eine neuere IE-Version zu simulieren[4].

Mit diesen Schritten sollten Sie in der Lage sein, die `SHDocVw`-Einheit in Delphi 10.1 erfolgreich zu nutzen und die `TWebBrowser`-Komponente in Ihren Anwendungen zu integrieren.

Citations:
[1] https://docwiki.embarcadero.com/Libr...Vw.TWebBrowser
[2] https://stackoverflow.com/questions/...tab=Unanswered
[3] https://docwiki.embarcadero.com/Libr...r.OnNewWindow2
[4] http://docwiki.embarcadero.com/Libra...Vw.TWebBrowser
[5] https://stackoverflow.com/questions/...elphi-active-x
[6] https://www.cryer.co.uk/brian/delphi...fnfSHDocVw.htm


Nachtrag Zu TWebVIEW: (auch Für Delphi 10.1)

TWebView
bietet mehrere Vorteile gegenüber **TWebBrowser** in Delphi, insbesondere wenn es um die Darstellung moderner Webinhalte und die Nutzung aktueller Webtechnologien geht. Hier sind die wichtigsten Vorteile:

### Vorteile von TWebView gegenüber TWebBrowser

1. **Unterstützung moderner Webstandards**:
- **TWebView** basiert auf der Chromium-Engine, die die neuesten Webstandards unterstützt, darunter HTML5, CSS3 und modernes JavaScript. Dadurch wird sichergestellt, dass Webanwendungen und -inhalte präzise und effizient gerendert werden.
- **TWebBrowser** hingegen basiert auf der Internet Explorer-Engine, die standardmäßig auf ältere Versionen wie IE7 zurückgreift, was zu Kompatibilitätsproblemen mit modernen Webanwendungen führen kann[5][8].

2. **Leistung und Sicherheit**:
- **TWebView** profitiert von den Leistungsverbesserungen und Sicherheitsupdates, die von der Chromium-Engine bereitgestellt werden. Es wird regelmäßig aktualisiert, um Sicherheitslücken zu schließen und die Leistung zu verbessern.
- **TWebBrowser** erhält nicht das gleiche Maß an Aktualisierungen, da er an die ältere Internet-Explorer-Technologie gebunden ist, die von Microsoft ausgemustert wird[8].

3. **Entwicklertools und Debugging**:
- Mit **TWebView** haben Entwickler Zugang zu den Chromium-Entwicklerwerkzeugen, die das Debugging und die Leistungsprofilerstellung von Webanwendungen direkt in der Komponente erleichtern.
- Dem **TWebBrowser** fehlen moderne Entwicklerwerkzeuge, was die Fehlersuche und Optimierung von Webinhalten erschwert[7].

4. **Plattformübergreifende Konsistenz**:
- **TWebView** bietet ein konsistentes Rendering-Erlebnis über verschiedene Plattformen hinweg, da es die gleiche zugrunde liegende Chromium-Engine verwendet, die auch von Browsern wie Chrome und Edge (Chromium) eingesetzt wird.
- **TWebBrowser** kann Inhalte je nach der auf dem System des Benutzers installierten Version des Internet Explorer unterschiedlich darstellen, was zu Inkonsistenzen führt[7].

5. **Zukunftssicher**:
- **TWebView** steht im Einklang mit Microsofts Strategie der Abkehr vom Internet Explorer hin zu Edge (Chromium) und ist damit eine zukunftssichere Wahl für Anwendungen, die Webinhalte anzeigen müssen.
- Mit dem Auslaufen des Internet Explorers könnte die Abhängigkeit von **TWebBrowser** zu zunehmenden Kompatibilitätsproblemen mit Webinhalten führen, da Websites die Unterstützung für ältere Browser einstellen[8].

Diese Vorteile machen **TWebView** zu einer geeigneteren Wahl für Anwendungen, die eine robuste, moderne Darstellung von Webinhalten und Interaktionsmöglichkeiten benötigen.

Zitate:
[1] http://docwiki.embarcadero.com/Libra...er.TWebBrowser
[2] https://stackoverflow.com/questions/...wser?tab=Votes
[3] https://stackoverflow.com/questions/...tab=Unanswered
[4] http://docwiki.embarcadero.com/RADSt...wser_Component
[5] http://docwiki.embarcadero.com/Libra...Vw.TWebBrowser
[6] https://www.mobiloud.com/blog/native-app-vs-webview-app
[7] https://weblog.west-wind.com/posts/2...-in-NET-Part-1
[8] https://blogs.embarcadero.com/browsi...-to-webview-2/

Um Popup-Fenster in TWebView zu blockieren, können Sie verschiedene Strategien anwenden, um sie zu verwalten oder ihr Erscheinen zu verhindern. Hier sind einige Ansätze, die Sie anwenden können:

Strategien zum Blockieren von Popups in TWebView

1 JavaScript-Einstellungen:

Eine der einfachsten Möglichkeiten, Popups zu blockieren, besteht darin, die JavaScript-Einstellungen der Webansicht zu konfigurieren. Sie können die Fähigkeit von JavaScript, neue Fenster automatisch zu öffnen, deaktivieren.

Wenn Ihre TWebView-Komponente dies zulässt, können Sie eine Eigenschaft ähnlich wie setJavaScriptCanOpenWindowsAutomatically(false) setzen, um zu verhindern, dass Popups durch JavaScript ausgelöst werden.

2 Ereignisbehandlung:


Implementieren Sie Event-Handler, die Anfragen zum Öffnen neuer Fenster abfangen. Wenn Ihre Web-View-Komponente Ereignisse für Anforderungen zum Öffnen neuer Fenster unterstützt, können Sie diese Ereignisse behandeln und entscheiden, ob das Popup zugelassen oder blockiert werden soll.
In einigen WebView-Implementierungen gibt es zum Beispiel ein Ereignis wie OnNewWindowRequested, bei dem Sie das Ereignis abbrechen können, um das Popup zu blockieren.

3 Benutzerdefinierter WebView-Client:

Wenn Ihr TWebView auf einem Framework basiert, das eine Anpassung erlaubt, können Sie bestimmte Client-Methoden außer Kraft setzen, um das Popup-Verhalten zu steuern.

In Android's WebView können Sie beispielsweise einen benutzerdefinierten WebChromeClient erstellen und Methoden wie onCreateWindow überschreiben, um zu verhindern, dass neue Fenster erstellt werden.

4 Bibliotheken von Drittanbietern:


Ziehen Sie die Verwendung von Bibliotheken oder Plugins von Drittanbietern in Betracht, die eine bessere Kontrolle über Webinhalte und Popup-Verwaltung bieten. Diese Bibliotheken können zusätzliche Hooks und Einstellungen für die effektive Verwaltung von Popups bereitstellen.

5 Konfigurationsoptionen:


Prüfen Sie, ob Ihre TWebView-Komponente über Konfigurationsoptionen speziell für die Verwaltung von Popups verfügt. Einige Komponenten ermöglichen es Ihnen, Popups über Einstellungen oder Eigenschaften zu aktivieren oder zu deaktivieren.
Durch die Umsetzung dieser Strategien können Sie Popup-Fenster in TWebView effektiv verwalten und blockieren und so eine reibungslosere Benutzererfahrung ohne unerwünschte Unterbrechungen gewährleisten.

Geändert von wschrabi (20. Aug 2024 um 09:53 Uhr)
  Mit Zitat antworten Zitat