[英]WebBrowser launch internet explorer
我正在尝试从URL中解析包含很多Javascript生成内容的内容,为此我正在使用WebBrowser控件。 最初,在同一对象的实例中加载目标URL列表的所有URL时,我遇到很多问题,因此我决定每隔几个请求就处理一次对象,然后创建一个新的实例,依此类推。 我现在面临的问题是,有时,当我处理该对象时,它会打开一个新的IE浏览器窗口,与我的应用程序无关,并加载我已经处理过的对象的url。 这是我的代码:
我在这篇文章中看到了类似的答案,但是它对我不起作用。
为什么有时WebBrowser.Dispose()启动Internet Explorer?
private void TriggerNavigation ()
{
if (urlList.Count > 0)
{
progressBar1.Value++;
if (LoopUrls++ >= 1)
{
URL = string.Empty;
LoopUrls = 0;
timerAjaxLoad.Stop();
webBrowser1.Stop();
webBrowser1.AllowNavigation = false;
webBrowser1.Dispose();
webBrowser1 = null;
GC.Collect();
webBrowser1 = new WebBrowser();
}
URL = urlList.First();
label1.Text = "Processing.." + URL;
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(URL);
webBrowser1.Navigating += webBrowser1_Navigating;
timerAjaxLoad.Start();
urlList.RemoveAt(0);
}
else
{
timerAjaxLoad.Stop();
}
}
更新:
我弄清楚是什么原因引起的。 并非所有页面都发生这种情况,而是仅发生在某些触发了外部页面的嵌入式JS中。 通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。
void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
{
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
{
if (x.OuterHtml.Contains("survey"))
e.Cancel = true;
}
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
{
e.Cancel = true;
}
}
我弄清楚是什么原因引起的。 并非所有页面都发生这种情况,而是仅发生在某些触发了外部页面的嵌入式JS中。 通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。
void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
{
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
{
if (x.OuterHtml.Contains("survey"))
e.Cancel = true;
}
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
{
e.Cancel = true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.