C# WPF中的WebBrowser仍在新窗口中打开链接

C# WPF中的WebBrowser仍在新窗口中打开链接,c#,wpf,webbrowser-control,C#,Wpf,Webbrowser Control,我想创建“在浏览器中”导航,每当单击的链接将弹出一个新窗口(即),我希望它取消并在我的浏览器上导航。我已经搜索并遵循了一些指南,但我无法阻止该窗口在其浏览器上导航。以下是我正在做的事情:- XAML:- <WebBrowser Name="HostWeb" Navigating="HostWeb_Navigating" LoadCompleted="HostWeb_LoadCompleted" DockPanel.Dock="Top"/> 第二种方法是我无法完成它,因为HostW

我想创建“在浏览器中”导航,每当单击的链接将弹出一个新窗口(即),我希望它取消并在我的浏览器上导航。我已经搜索并遵循了一些指南,但我无法阻止该窗口在其浏览器上导航。以下是我正在做的事情:-

XAML:-

<WebBrowser Name="HostWeb" Navigating="HostWeb_Navigating" LoadCompleted="HostWeb_LoadCompleted" DockPanel.Dock="Top"/>
第二种方法是我无法完成它,因为HostWeb.ActiveXInstance;SHDocVw上不存在:-

以web为例,如何防止在新选项卡/新窗口弹出之前打开它,并在当前浏览器中导航(在当前页面中打开新选项卡/新窗口)

附加: 鉴于booking.com页面有4个主菜单[住宿、航班、租车、机场出租车],当单击其中任何一个时,它将弹出,并且不会点击
主机Web\u导航事件。

请参阅

添加对COM->Microsoft Internet控件的引用,并处理
LoadCompleted
事件:

static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
internal interface IServiceProvider
{
    [return: MarshalAs(UnmanagedType.IUnknown)]
    object QueryService(ref Guid guidService, ref Guid riid);
}

private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    IServiceProvider serviceProvider = (IServiceProvider)webBrowser.Document;
    Guid serviceGuid = SID_SWebBrowserApp;
    Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
    SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);
    SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
    wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);
}

private void OnWebBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers,
    ref bool Processed)
{
    Processed = true;
    webBrowser.Navigate(URL);
}
XAML:

<WebBrowser x:Name="webBrowser" Source="http://booking.com" LoadCompleted="WebBrowser_LoadCompleted" />


你试过拦截吗?@MarkFeldman我在第一次代码包装时就试过了。该链接还可以从给定链接导航到同一页面。根据我在链接1示例中提出的问题,您的解决方案已经适用。发生的事情是它从新窗口弹出。我对网络术语了解不多,在WebBrowser WPF中,它打开了一个新窗口。如果我在Opera浏览器中打开,它将在新选项卡中打开。有没有什么方法可以在点击链接导航之前捕获它,这样它就可以在父页面中导航?这是很有用的。但是我想知道为什么链接的导航页面看起来像是坏的和未完成的加载?你知道吗?
static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
internal interface IServiceProvider
{
    [return: MarshalAs(UnmanagedType.IUnknown)]
    object QueryService(ref Guid guidService, ref Guid riid);
}

private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    IServiceProvider serviceProvider = (IServiceProvider)webBrowser.Document;
    Guid serviceGuid = SID_SWebBrowserApp;
    Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
    SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);
    SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
    wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);
}

private void OnWebBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers,
    ref bool Processed)
{
    Processed = true;
    webBrowser.Navigate(URL);
}
<WebBrowser x:Name="webBrowser" Source="http://booking.com" LoadCompleted="WebBrowser_LoadCompleted" />