簡體   English   中英

如何在C#WebBrowser上模擬“在新窗口上打開鏈接”?

[英]How to simulate a “open link on new window” on a C# WebBrowser?

我剛剛發現,為了模擬點擊,我可以調用element.InvokeMember("click"); 其中element是一個HtmlElement 但我真正需要的是在新窗口中打開鏈接,但不是在默認瀏覽器上,而是在我的程序中創建的另一個WebBrowser 有時通過調用element.GetAttribute("href");來獲取href屬性是有效的element.GetAttribute("href"); 然后只是導航到返回的URL,但是一些挑剔的網頁不會以這種方式工作,我假設與cookie和會話有關。

System.Windows.Forms.WebBrowser是一個非常殘缺的控件,也是它最大的問題之一 - 支持多標簽。 它根本不支持它。

我花了很多時間嘗試讓它正常工作,但沒有取得足夠的成功,所以建議你嘗試第三方控制。

解決方法:訂閱頁面上每個<a>點擊事件(或您需要的其中一些)並手動創建新窗口。 例如,看看它是如何在dotBrowser中實現的: 1 2

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;
        }
    }
}

只需處理NewWindow2事件,創建一個包含webbrowser的表單/選項卡,並使用webbrowser作為新窗口請求的目標。 有關示例,請訪問http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM