【问题标题】:How to simulate a "open link on new window" on a C# WebBrowser?如何在 C# WebBrowser 上模拟“在新窗口上打开链接”?
【发布时间】:2010-08-06 07:23:32
【问题描述】:

我刚刚发现要模拟点击,我可以调用element.InvokeMember("click");,其中elementHtmlElement。但我真正需要的是在新窗口中打开链接,但不是在默认浏览器上,而是在另一个WebBrowser 我将在我的程序中创建。有时它可以通过调用element.GetAttribute("href"); 来获取 href 属性,然后导航到返回的 URL,但是一些挑剔的网页不会以这种方式工作,我假设与 cookie 和会话有关。

【问题讨论】:

  • 好的,这可以通过其他方式解决:如果我可以克隆 WebBrowser 的内容,我可以点击克隆上的链接。我也可以只重新加载当前的 URL,但在某些情况下可能会很混乱。可能有一种方法可以将整个事物克隆到与其相同的状态。

标签: c# .net winforms webbrowser-control


【解决方案1】:

只需处理 NewWindow2 事件,创建一个带有 webbrowser 的表单/选项卡,然后使用 webbrowser 作为新窗口请求的目标。以http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx 为例。

【讨论】:

    【解决方案2】:

    System.Windows.Forms.WebBrowser 是一个非常残缺的控件,也是它最大的问题之一——支持多标签。根本不支持。

    我花了很多时间尝试让它正常工作,但没有取得足够的成功,所以建议你改用 3rd 方控制。

    解决方法:订阅页面上每个<a> 的点击事件(或您需要的一些)并手动创建一个新窗口。比如看dotBrowser是怎么实现的:12

    foreach (HtmlElement tag in webBrowser.Document.All)
    {
        tag.Id = String.Empty;
        switch (tag.TagName.ToUpper())
        {
            case "A":
            {
                tag.MouseUp += new HtmlElementEventHandler(link_MouseUp);
                break;
            }
        }
    }
    
    private void link_MouseUp(object sender, HtmlElementEventArgs e)
    {
        mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)((HtmlElement)sender).DomElement;
        switch (e.MouseButtonsPressed)
        {
            case MouseButtons.Left:
            {
                // open new tab
                break;
            }
            case MouseButtons.Right:
            {
                // open context menu
                break;
            }
        }
    }
    

    【讨论】:

    • 但是,“// 打开新选项卡”行中的代码是什么,因为这是您在新窗口中实际打开链接的地方?
    • @jsoldi:按照上面的链接 #2。我在你的情况下 - 将创建一个带有接受字符串(url)的构造函数的新表单。该表单将创建一个新的 WebBrowser 并将其导航到该 url。
    • 嗯,问题在于某些页面使用 cookie 和类似的东西,这不允许我复制链接并在新窗口中打开它。这就是我之前在做的事情,直到我在 ebay 上发现,复制“下一步”链接的 href(将我发送到下一页结果的链接)然后在新窗口中导航到它总是会让我着陆在第一页。不知道为什么。我怀疑这与会话和 cookie 有关。
    猜你喜欢
    • 2020-12-01
    • 2013-10-07
    • 2015-02-09
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多