C#で WebBrowserを使ってみよう(その1)
カテゴリー: ぷろぐらみんぐ/メモ
2011-10-17
C#で WebBrowserを使ってみよう(その1)
Delphiで作ると実行ファイルが大きくなるし、Tabで WebBrowserコ ントロール内に移動できないので
さぁ C#だー
はっはっはっ!
って 試験動作させると
瞬時に ずっこけました。
OnNewWindowで、Dispatchが設定したかったのです。
他にもいっぱいあるのですけど
NewWindowでDelphi相当の機能が実装されていないのです。
開くURLも取得できないし、Dispatchも設定できないなんて、酷い(ひどい)話です。
.Netには、なんの嫌がらせか知りませんが、本来つけておくべきイベントがたくさんないのです。
なんでもかんでも
新しいWindowで開くで、IEに送るのでは、WebBrowserを内蔵する意味がほとんどないでしょ。
(※IEに送るとセッションCookie?が引き継がれないから問題なんです。)
ということで、
.NetのWebBrowserを拡張して本来あるべきイベントを追加して対処しました。
参考にした フォーラム が型とか ウソ書いていたので
少し手間だったヨ。
◎よくできました
とりあえず、目的の動作をするようにしたのでので「よし」としよう。
【参考サイト】
執筆:2011.10.15
編集:2011.10.16
編集: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 メソッド (使用例)
・他