Unterdrückt die "wollen Sie wirklich diese Seite zu verlassen" popup in der Delphi TWebbrowser-Steuerung
Ich habe eine Delphi-Anwendung, die verwendet TWebbrowser
Komponente zu automatisieren navigation zu einer anderen web-Anwendung, die wir haben.
Mein problem ist, dass manchmal der IE zeigt die berüchtigten "Sind Sie sicher, dass Sie wollen, diese Seite zu verlassen' Meldung und wenn dies geschieht, meine app kann nicht navigieren Sie zu anderen Seiten, es sei denn, ein Benutzer klickt auf 'Verlassen Sie diese Seite' button. Ich kann nicht Bearbeiten Sie die website-code zu entfernen diese Warnung, leider.
Diese Nachricht ist plagt meine app für Wochen, und ich konnte Sie nicht erreichen, um eine angemessene Lösung mehr. Was ich gemacht habe ist, um einen hintergrund-Prozess manuell senden einer Tastatureingabe, wenn dieses Fenster wird angezeigt, aber dies ist nicht eine gute Lösung, denn niemand kann den computer benutzen, während meine app funktioniert.
Ich sah die mögliche Lösung für C# im Thema unter, aber ich brauche eine Delphi-code statt.
Jede Hilfe sehr, sehr dankbar.
Dank 🙂
- Es ist wahrscheinlicher, Sie können dies tun, mit TEmbeddedWB, die verbesserte version des IShellDocView/InternetExplorer hat es viel mehr features als die TWebBrowser-wrapper.
- Warum kann nicht der Benutzer, der browsing klicken Sie auf den button?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Meldung wird angezeigt, indem Sie die zugrunde liegenden MSHTML-engine wenn sich die web-Seite Griffe Fenster.onbeforeunload Veranstaltung. In der Regel ist es da für einen Grund, damit der Benutzer weiß, seine/Ihre Eingabe nicht gespeichert oder übermittelt noch. Die Aufforderung Unterdrückung Skript von die Antwort, die Sie verlinkten funktioniert nicht für die Fälle, wenn die Seite benutzt wird
addEventListener("beforeonload", handler)
oderattachEvent("onbeforeunload", handler)
. Ich glaube nicht, dass es eine zuverlässige Möglichkeit, dies zu tun, ohne Rückgriff auf low-level-Windows-hooks.[UPDATE] Das folgende Skript aus (suchen Sie nach "Spritzen Sie das Skript") ist ein hack, die aggressiv unterdrückt die Seite der eigenen Handler für
onbeforeunload
Ereignis, übersetInterval
. Es sollte in 99% der Fälle, aber es lässt immer noch eine Lücke für die Seite zu überschreibenonbeforeonload
direkt vor der Navigation Weg.Injizieren dieses script mit Delphi, würden Sie wahrscheinlich brauchen, to resort to low-level -
WebBrowser/MSHTML
COM-Schnittstellen, wieIWebBrowser2
,IHTMLDocument2
,IHTMLScriptElement
, in einer sehr ähnlichen Art, wie es geschieht in der verlinkten Antwort. Mit etwas mehr Bemühungen, das gleiche kann man auch über die späte Bindung, mitIDispatch::GetIDsOfNames
undIDispatch::Invoke
nur. Wenn Sie Fragen zur genauen Delphi-code, weiß ich nicht.Die anderen beantworten Sie mit einem link auf die Griffe des Browsers
Navigated
Veranstaltung. In es, es spritzt ein script-element in die Seite und in jedem frame auf die Seite. Das Skript einen neuen Wert zuweistwindow.alert
so, dass, wenn anderer code auf der Seite ruft es, es bringt nichts.Dieser code setzt den event-handler: