3

新しい Window イベントを新しいタブにリダイレクトしようとしています:

myWebBrowser.NewWindow += add_NewTab; 

//...

private void add_NewTab(object sender, CancelEventArgs e)
{ 
    WebBrowser thisWebBrowser = (WebBrowser)sender;
    e.Cancel = true; //should block the default browser to open a new window

    TabPage addedTabPage = new TabPage("redirected tab"); //create a new tab
    tabControl_webBrowsers.TabPages.Add(addedTabPage); //add the new tab to the TabControl
    WebBrowser addedWebBrowser = new WebBrowser() //create the new web browser inside the new tab
    {
        Parent = addedTabPage,
        Dock = DockStyle.Fill
    };

    addedWebBrowser.Navigate(thisWebBrowser.StatusText.ToString()); //set the new browser destination url
}

を使用することが、新しいウィンドウの URL を取得する最良の方法であるかどうかはWebBrowser.StatusTextわかりません (これは、テストしたすべてのサイトで機能するとは限りません)。

代わりに、新しいウィンドウの宛先を取得するために呼び出すより良いクラス/メソッドはありますか?


アップデート:

チャーリーが提案した解決策を試しました

  1. Microsoft Internet Control (COM) リファレンスを追加
  2. SHDocVw を使用して追加。
  3. コードを使用しました:

    System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)myWebBrowser.ActiveXInstance;
    axBrowser.NewWindow3 += 新しい DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);

残念ながらNullReference Exception、修正できなかった 3 番目の行を受け取りました。


解決:

NewWindow2イベントを実装する方法を説明しているため(元の宛先URLを処理するNewWindow3の代わりに)、解決策が関連する回答にあるとは思わない(または見つけることができなかった)および実装は提案されているのと同じですここで NullReference Exception エラーが発生します。
とにかく、私はこの2つの投稿を発見しました:

  • 議論_
  • 元の記事(ページは中国語ですが、コードは読めます)

前の 3 行を次のように変更することをお勧めします。

(myWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);

System.Windows.Forms.WebBrowser現在、すべてが機能しており、残りのすべてのコードでオリジナルを使用し続けることができました。

4

1 に答える 1

8

コントロールは本当に不十分なWebBrowserラッパーのようSHDocVwです。幸いなことに、Microsoft は .NET を通じて基礎となる実装を公開していWebBrowser.ActiveXInstanceます。

http://www.codeproject.com/Articles/71592/How-to-easily-capture-the-NewWindow3-event-and-detのこのコードでうまくいきます。

まず、 への参照を追加しますMicrosoft Internet Controls。次に、NewWindow3 ハンドラーを実装します。

SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser.ActiveXInstance;
axBrowser.NewWindow3 += new DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);
于 2013-02-14T17:35:34.800 に答える