日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
ラジコン
2024年5月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

C#で WebBrowserを使ってみよう(その1)

2011-10-17
C#で WebBrowserを使ってみよう(その1)

執筆:2011.10.15
編集:2011.10.16


Delphiで作ると実行ファイルが大きくなるし、Tabで WebBrowserコ ントロール内に移動できないので

さぁ C#だー
 はっはっはっ!
  って 試験動作させると
    瞬時に ずっこけました。

OnNewWindowで、Dispatchが設定したかったのです。

他にもいっぱいあるのですけど
NewWindowでDelphi相当の機能が実装されていないのです。
開くURLも取得できないし、Dispatchも設定できないなんて、酷い(ひどい)話です。

.Netには、なんの嫌がらせか知りませんが、本来つけておくべきイベントがたくさんないのです。

なんでもかんでも
新しいWindowで開くで、IEに送るのでは、WebBrowserを内蔵する意味がほとんどないでしょ。
(※IEに送るとセッションCookie?が引き継がれないから問題なんです。)

ということで、
.NetのWebBrowserを拡張して本来あるべきイベントを追加して対処しました。


 private void exWebBrowser1_NewWindow3(
    object sender,
    WebBrowserExtendedNewWindow3EventArgs e)
 {
     // メモ
     //  (1)e.pDisp に設定しない。新しいIEとして開く。
     //  (2)e.pDisp を設定する。指定したWebBrowserで開く。
     //     ※同じWebBrowserでは、e.pDispは、動作しない。
     //  (3)同じWebBrowserで開く。キャンセルNavigateを呼ぶ。
     //     ※POSTなどが失われるので注意。
     // MessageBox.Show((string) e.URL);
     // open as self WebBrowser
     //  e.Cancel = true; exWebBrowser1.Navigate((string) e.URL);
     // open as new WebBrowser
     //  e.pDisp = exWebBrowser2.ActiveXInstance;
 }

// using System.Runtime.InteropServices;
    public event EventHandler<WebBrowserExtendedNewWindow3EventArgs> NewWindow3;

    protected void OnNewWindow3( ... 省略
    ..... 省略

    [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
    TypeLibType(TypeLibTypeFlags.FHidden)]
    public interface DWebBrowserEvents2
    {
       [DispId(273)]
       void NewWindow3(
           [In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object pDisp,
           [In, Out] ref bool cancel,
           [In] ref object flags,
           [In] ref object URLContext,
           [In] ref object URL);
    }


読者に作る機会を与え、動作原理を理解させるために
あえて、完全なコードは開示していません。
不足分は、参考サイトを見ながら完成させましょう。

参考にした フォーラム が型とか ウソ書いていたので
少し手間だったヨ。

◎よくできました
とりあえず、目的の動作をするようにしたのでので「よし」としよう。


【参考サイト】
  • webBrowserで別のウインドウで開くときの開く先のURLの取得法
    とその中のリンク記事
    (VSUG フォーラム → .NET 開発  → Visual C#  → webBrowserで別のウインドウで開くときの開く先のURLの取得法)
  • MSDN Library for Visual Studio 2008
    ・CreateSink メソッド (使用例)
    ・他





トラックバック
トラックバックはありません。
PR

[PR]