我试图将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/