我正在使用WPF System.Windows.Controls.WebBrowser
控件来显示从服务下载的一些HTML内容。有时HTML包含应该可点击的URL(" a"元素)。
默认情况下,单击此类URL时,它将在Internet Explorer中打开。我希望它们在默认浏览器中打开。
注意我正在谈论WPF WebBrowser。 WinForms浏览器有很多解决方案,但它们不适用于WPF浏览器。
最常见的"解决方案"是处理导航事件,取消它然后用URL做自己的事情。此不起作用,因为单击HTML中的链接时未调用导航事件。
我发现的另一个解决方案似乎确实有效,但有时仅出于某种奇怪的原因:https://stackoverflow.com/a/9111151/573249
我现在有以下代码,使用上面链接中的方法:
private void WebBrowser_OnNavigating(object sender, NavigatingCancelEventArgs e)
{
// Just for demonstration purposes
// This is NOT CALLED when a link is clicked
Debug.WriteLine("> Navigating called.");
if (e.Uri == null)
{
Debug.WriteLine(">> URI was null.");
return;
}
e.Cancel = true;
Process.Start(e.Uri.AbsolutePath);
Debug.WriteLine(">> Navigation cancelled and opened in default browser.");
}
private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
{
Debug.WriteLine("> LoadCompleted called.");
mshtml.HTMLDocument doc;
doc = (mshtml.HTMLDocument) webBrowser.Document;
mshtml.HTMLDocumentEvents2_Event iEvent;
iEvent = (mshtml.HTMLDocumentEvents2_Event) doc;
iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
Debug.WriteLine("> LoadCompleted finished!");
Debug.WriteLine("------");
}
private bool ClickEventHandler(mshtml.IHTMLEventObj e)
{
// This finally opens the URL in the default browser
// The method is called only 20% of the time.
Debug.WriteLine(">> Click event handler called.");
var a = (mshtml.HTMLAnchorElement) e.srcElement;
Process.Start(a.href);
return false;
}
当我点击链接时,似乎有20%的时间可以正常工作。在那些情况下," ClickEventHandler"被调用,并在默认浏览器中打开链接。在其他80%的案例中," ClickEventHandler"永远不会被调用(并且链接在IE中打开),即使" OnLoadCompleted"完成没有例外。
似乎没有一种模式,尽管在我重新加载HTML之前,它似乎在同一文档上永远失败了。重新加载后,它恢复了20%的工作机会。
发生了什么?
答案 0 :(得分:1)
嗨我有完全相同的问题。 OnMouseDown事件有时会被触发。我无法理解这一点。我只是放弃了,而是使用了WinForm WebBrowser。 那么你不需要MSHTML的参考,但你需要参考System.Windows.Forms和System.Windows.Interactivity。
XAML
make_video
C#
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
<WindowsFormsHost>
<wf:WebBrowser x:Name="WbThumbs"/>
</WindowsFormsHost>