按 .NET Web 浏览器控件中的“是否确实要离开此页”弹出窗口
本文关键字:离开 窗口 浏览器 Web NET 控件 是否 | 更新日期: 2023-09-27 18:32:38
我有一个用WinForms C#编写的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) { };
}
);
您可以对网站代码进行任何更改吗?
如果是这样,您可能会考虑通过 ObjectForScripting
公开对象,然后在决定显示弹出窗口之前让网站代码检查window.external
(并可能询问您的对象( - 因此,如果它找不到您的对象,它会假设它正在正常使用并显示它。
不再需要添加。试试吧。像魅力一样工作。^_^
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");
}