Supprimer le “êtes-vous sûr de vouloir quitter cette page” popup dans la Delphi TWebbrowser de contrôle
J'ai une application Delphi qui utilise TWebbrowser
composant pour automatiser la navigation vers une autre application web que nous avons.
Mon problème est que, parfois, IE montre la tristement célèbre " Êtes-vous sûr de vouloir quitter cette page, message et quand cela arrive, mon application ne peut pas accéder à un autre pages, à moins qu'un utilisateur clique sur 'Quitter cette page" bouton. Je ne peux pas modifier le code du site web pour supprimer cet avertissement, malheureusement.
Ce message est affligent de mon application pendant des semaines, et je ne pouvais pas arriver à une bonne solution de plus. Ce que j'ai fait est de garder un processus d'arrière-plan ne envoyer manuellement une frappe lorsque cette fenêtre s'afficher, mais ce n'est pas une bonne solution car on ne peut pas utiliser l'ordinateur pendant que mon application fonctionne.
J'ai vu solution possible pour C# dans la rubrique ci-dessous, mais j'ai besoin d'un code Delphi à la place.
Supprimer l' "êtes-vous sûr de vouloir quitter cette page" popup dans la .NET contrôle webbrowser
Que toute aide est très, très apprécié.
Merci 🙂
- Il est plus probable que vous pouvez faire cela avec TEmbeddedWB, la version améliorée de la IShellDocView/InternetExplorer, il a beaucoup plus de fonctionnalités que les TWebBrowser wrapper.
- Pourquoi on ne peut pas l'utilisateur qui est de la navigation cliquez sur le bouton?
Vous devez vous connecter pour publier un commentaire.
Ce message est affiché par le sous-jacent MSHTML moteur si la page web poignées de la fenêtre.onbeforeunload événement. Généralement, il est là pour une raison, pour permettre à l'utilisateur de connaître son entrée n'a pas été enregistré ou présenté encore. L'invite de script de suppression de la réponse que vous avez lié ne fonctionne pas dans les cas où la page utilise
addEventListener("beforeonload", handler)
ouattachEvent("onbeforeunload", handler)
. Je ne pense pas qu'il y a un moyen fiable de le faire, sans avoir recours à faible niveau de Windows crochets.[Mise à JOUR] Le script suivant (rechercher pour "Injecter ce script") est un hack qui agressivement supprime la page des gestionnaires pour
onbeforeunload
événement viasetInterval
. Il faut travailler dans 99% des cas, mais il reste toujours un écart à la page de remplaceronbeforeonload
juste avant de naviguer à l'extérieur.Pour injecter ce script avec Delphi, vous auriez probablement besoin de recourir à de faibles niveaux de
WebBrowser/MSHTML
interfaces COM, commeIWebBrowser2
,IHTMLDocument2
,IHTMLScriptElement
, d'une manière très similaire, c'est fait dans la réponse. Avec un peu plus d'efforts, la même chose peut être fait par l'intermédiaire d'une liaison tardive, à l'aide deIDispatch::GetIDsOfNames
etIDispatch::Invoke
seulement. Si vous vous posez la question pour connaître le code Delphi, je n'en ai pas.L'autre réponse vous un lien vers les poignées du navigateur
Navigated
événement. En cela, il injecte un élément de script dans la page et dans chaque image sur la page. Ce script affecte une nouvelle valeur àwindow.alert
de sorte que quand un autre code sur la page l'appelle, il ne fait rien.Ce code réinitialise le gestionnaire d'événement: