3


0

C#WebBrowserで「新しいウィンドウでリンクを開く」をシミュレートする方法は?

クリックをシミュレートするために、 element.InvokeMember(" click ");`を呼び出すことができることがわかりました。ここで、 `element`は HtmlElement`です。 しかし、実際に必要なのは、新しいウィンドウでリンクを開くことですが、デフォルトのブラウザではなく、プログラムで作成する別の「WebBrowser」です。 `element.GetAttribute(" href ");`を呼び出してhref属性を取得し、返されたURLに移動するだけで機能する場合もありますが、一部のうるさいWebページはこの方法では機能しません。およびセッション。

2 Answer


1


`System.Windows.Forms.WebBrowser`は非常に不自由なコントロールであり、最大の問題の1つであるマルチタブのサポートです。 それはまったくサポートしていません。

私はそれを適切に機能させるために多くの時間を費やしましたが、十分な成功を収めていませんでしたので、代わりにサードパーティのコントロールを試すことをお勧めします。

回避策:各 ``ページ(または必要なもの)のクリックイベントにサブスクライブし、新しいウィンドウを手動で作成します。 たとえば、dotBrowserでどのように実装されているかを確認してください:http://dotbrowser.svn.sourceforge.net/viewvc/dotbrowser/trunk/MainForm/frmMain.Browser.cs?revision=51&view=markup#l90[1] http:/ /dotbrowser.svn.sourceforge.net/viewvc/dotbrowser/trunk/MainForm/frmMain.ContextMenu.cs?revision=51&view=markup#l227[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;
        }
    }
}


0


NewWindow2イベントを処理し、webbrowserを含むフォーム/タブを作成し、webbrowserを新しいウィンドウリクエストのターゲットとして使用します。 例については、http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspxを確認してください。