4

我正在使用网络浏览器控件从网站获取一些信息。它有一个详细链接,单击该链接会打开一个弹出窗口并在网络浏览器中显示详细信息。

如果单击 webbrowser 控件中的链接(按程序)打开另一个窗口并显示执行错误,我该怎么做。

但在资源管理器中它正在工作。而且我注意到详细链接仅在我在 Internet Explorer 中打开主页时才有效,否则如果我直接从 Internet Explorer 调用详细 URL,它也会给我同样的错误。

4

3 回答 3

13

我最近遇到了一个非常相似的情况。就我而言,弹出式浏览器没有共享嵌入式浏览器的会话。我必须做的是捕获 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);
    }
}
于 2013-03-06T06:44:24.400 回答
1

这是动态版本。它不需要静态绑定 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
    }
}
于 2015-07-14T13:43:08.493 回答
0

细化为 Middas 的答案...

  • 添加 COM 引用 Microsoft Internet 控件。
  • 使用 Middas 代码。
  • 在 form_Load 中定义您的 Uri,所有弹出窗口将直接更改您的 winform WebBrowser。
于 2014-01-21T04:02:41.503 回答