我试图将NewWindow3事件与Microsoft Web浏览器控件一起使用,以便可以捕获URL并阻止其打开Internet Explorer。 NewWindow2正常运行,但NewWindow3无效。我唯一可以找到的相关内容是NewWindow3 event on extended WebBrowser,但是我不想使用自定义控件。我想使用库存控制。如何在不使用自定义控件的情况下使NewWindow3事件起作用?

private void Form1_Load( object sender, EventArgs e )
{
    webBrowser1.Navigate("http://www.stackoverflow.com");
    SHDocVw.WebBrowser browser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    Debug.Assert(browser != null);
    browser.NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(browser_NewWindow2);
    browser.NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(browser_NewWindow3);
}

void browser_NewWindow2( ref object ppDisp, ref bool Cancel )
{
    Debug.Write("NewWindow2");
}

private void browser_NewWindow3( ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl )
{
    Debug.Write(bstrUrl);
}

最佳答案

经过数周的努力,我终于弄明白了。我没有使用Web浏览器控件的.Net包装器,而是通过执行以下操作将Web浏览器控件添加为ActiveX COM控件:


右键单击“工具箱”中的任何控件,然后选择“选择项目...”。
转到“ COM组件”选项卡,然后选择“ Microsoft Web浏览器”
从“工具箱”的“所有Windows窗体”类别中,将Microsoft Web浏览器控件添加到窗体。
NewWindow3事件正常公开。无需使用webBrowser1.AxtiveXControl即可到达。
NewWindow3事件添加代码

private void axWebBrowser1_NewWindow3( object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow3Event e )
{
    Debug.WriteLine(e.bstrUrl);
    e.cancel = true;
}

关于c# - 未触发NewWindow3事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30010402/

10-10 16:50