我正在使用网络浏览器控件从网站获取一些信息。它有一个详细链接,单击该链接会打开一个弹出窗口并在网络浏览器中显示详细信息。
如果单击 webbrowser 控件中的链接(按程序)打开另一个窗口并显示执行错误,我该怎么做。
但在资源管理器中它正在工作。而且我注意到详细链接仅在我在 Internet Explorer 中打开主页时才有效,否则如果我直接从 Internet Explorer 调用详细 URL,它也会给我同样的错误。
我正在使用网络浏览器控件从网站获取一些信息。它有一个详细链接,单击该链接会打开一个弹出窗口并在网络浏览器中显示详细信息。
如果单击 webbrowser 控件中的链接(按程序)打开另一个窗口并显示执行错误,我该怎么做。
但在资源管理器中它正在工作。而且我注意到详细链接仅在我在 Internet Explorer 中打开主页时才有效,否则如果我直接从 Internet Explorer 调用详细 URL,它也会给我同样的错误。
我最近遇到了一个非常相似的情况。就我而言,弹出式浏览器没有共享嵌入式浏览器的会话。我必须做的是捕获 NewWindow 事件并取消它,然后将预期的 URL 发送到嵌入式浏览器。我需要使用 ActiveX 浏览器实例,因为它为您提供了尝试启动的 URL。这是我的代码:
您需要将 Microsoft Internet Controls COM 引用添加到您的项目中才能正常工作。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// this assumes that you've added an instance of WebBrowser and named it webBrowser to your form
SHDocVw.WebBrowser_V1 axBrowser = (SHDocVw.WebBrowser_V1)webBrowser.ActiveXInstance;
// listen for new windows
axBrowser.NewWindow += axBrowser_NewWindow;
}
void axBrowser_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
// cancel the PopUp event
Processed = true;
// send the popup URL to the WebBrowser control
webBrowser.Navigate(URL);
}
}
这是动态版本。它不需要静态绑定 com 互操作,这在未来版本的 windows 中总是存在问题。
public partial class Form10 : Form
{
public Form10()
{
InitializeComponent();
webBrowser1.Navigate("about:blank");
dynamic ax = this.webBrowser1.ActiveXInstance;
ax.NewWindow += new NewWindowDelegate(this.OnNewWindow);
this.webBrowser1.Navigate("http://google.com");
}
private delegate void NewWindowDelegate(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed);
private void OnNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
Processed = true;
//your own logic
}
}
细化为 Middas 的答案...