WinForms C# で記述された Web ブラウザー自動化プロジェクトがあります。ナビゲーション中に、ブラウザが「このページを離れてもよろしいですか?」と確認するポイントがあります。現れる。このポップアップが必要なので、Web サイトのコードから削除することはできません。つまり、自動化アプリでオーバーライドする必要があります。
これを行う方法を知っている人はいますか?
WinForms C# で記述された Web ブラウザー自動化プロジェクトがあります。ナビゲーション中に、ブラウザが「このページを離れてもよろしいですか?」と確認するポイントがあります。現れる。このポップアップが必要なので、Web サイトのコードから削除することはできません。つまり、自動化アプリでオーバーライドする必要があります。
これを行う方法を知っている人はいますか?
そしてここにスムーズな解決策がありました..
mshtml への参照を追加し、mshtml を使用して追加します。
Browser.Navigated +=
new WebBrowserNavigatedEventHandler(
(object sender, WebBrowserNavigatedEventArgs args) => {
Action<HtmlDocument> blockAlerts = (HtmlDocument d) => {
HtmlElement h = d.GetElementsByTagName("head")[0];
HtmlElement s = d.CreateElement("script");
IHTMLScriptElement e = (IHTMLScriptElement)s.DomElement;
e.text = "window.alert=function(){};";
h.AppendChild(s);
};
WebBrowser b = sender as WebBrowser;
blockAlerts(b.Document);
for (int i = 0; i < b.Document.Window.Frames.Count; i++)
try { blockAlerts(b.Document.Window.Frames[i].Document); }
catch (Exception) { };
}
);
もう追加する必要はありません。それを試してみてください。魔法のように働きます。^_^
private void webNavigated(object sender, WebBrowserNavigatedEventArgs e)
{
HtmlDocument doc = webBrowser.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("text", "function cancelOut() { window.onbeforeunload = null; window.alert = function () { }; window.confirm=function () { }}");
head.AppendChild(s);
webBrowser.Document.InvokeScript("cancelOut");
}
ウェブサイトのコードを変更できますか?
ObjectForScripting
その場合、ポップアップを表示するかどうかを決定する前に、Web サイトのコードをチェックして(場合によってはオブジェクトに問い合わせて) 、オブジェクトを公開して、オブジェクトwindow.external
が見つからない場合は、オブジェクトが正常に使用されていると見なし、それを示しています。