C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: WebBrowserの表示内容をリロードしたときのイベント


(過去ログ 85 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■50596 / inTopicNo.1)  WebBrowserの表示内容をリロードしたときのイベント
  
□投稿者/ プランタン (3回)-(2010/06/11(Fri) 21:56:59)

分類:[VB.NET/VB2005 以降] 

またVB 2008のWebBrowserについて質問させて頂きます。
WebBrowserの表示内容をRefresh()などでリロードした場合、
DocumentCompletedイベントは発生しないようですが、
リロードが完了したときに何らかのイベントを発生させることはできないでしょうか。
よろしくお願いします。
引用返信 編集キー/
■50604 / inTopicNo.2)  Re[1]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ やじゅ (1639回)-(2010/06/12(Sat) 12:19:14)
やじゅ さんの Web サイト
No50596 (プランタン さん) に返信
> またVB 2008のWebBrowserについて質問させて頂きます。
> WebBrowserの表示内容をRefresh()などでリロードした場合、
> DocumentCompletedイベントは発生しないようですが、
> リロードが完了したときに何らかのイベントを発生させることはできないでしょうか。

DownloadCompleteイベントかな、これで検索してみてください。
http://d.hatena.ne.jp/language_and_engineering/20100410/p1
引用返信 編集キー/
■50609 / inTopicNo.3)  Re[2]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ プランタン (4回)-(2010/06/12(Sat) 15:36:29)
No50604 (やじゅ さん) に返信
> DownloadCompleteイベントかな、これで検索してみてください。
> http://d.hatena.ne.jp/language_and_engineering/20100410/p1

やじゅ様、この度もご回答ありがとうございました。
しかしながら、VB 2008のWebBrowserには、DownloadCompleteというイベントはないようです。
(ハンドル名にこれを指定しても、「イベントDownloadCompleteが見つかりません」エラーになります。)
とりあえず、WebBrowserのリロードが完了したらタイマーで強制的にイベント発生ということでもいいのですが、
WebBrowserのリロード完了の判断をしたいのです。
よろしくお願いします。
引用返信 編集キー/
■50614 / inTopicNo.4)  Re[3]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ やじゅ (1640回)-(2010/06/12(Sat) 19:07:15)
やじゅ さんの Web サイト
2010/06/12(Sat) 19:32:19 編集(投稿者)

No50609 (プランタン さん) に返信
> しかしながら、VB 2008のWebBrowserには、DownloadCompleteというイベントはないようです。

失礼しました。COM版ならあるけど、WebBrowserコントロールではなくなっているのか。
http://d.hatena.ne.jp/nabejiru/20090622/1245652573

下記サイトのメモ欄が問題となっているわけですね。
http://msdn.microsoft.com/ja-jp/library/ts4tye44%28VS.80%29.aspx
「ドキュメントの更新を行うと、単純に現在のページの再読み込みが実行されます。
したがって、Refresh メソッドを呼び出しても Navigating イベント、Navigated イベント、
および DocumentCompleted イベントは発生しません。」

下記サイトの質問の回答方法ではどうでしょうか?
「WebBrowser コントロールの Navigate と Refresh を使うと更新完了のタイミングが掴めない」
http://ap.atmarkit.co.jp/bbs/core/fdotnet/19040

追加
WebBrowserコントロールの更新の完了のイベントを発生させる
http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/03/webbrowser_c87c.html
引用返信 編集キー/
■50615 / inTopicNo.5)  Re[4]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ YAS (1回)-(2010/06/12(Sat) 19:43:38)
> WebBrowserコントロールの更新の完了のイベントを発生させる
> http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/03/webbrowser_c87c.html

どおも。紹介いただいたページの者です。

上のページの例は,リロードしたときに,ただReadyStateをポーリングして見ているだけです。
厳密にはイベントが発生している訳ではありませんが,他に方法が思いつきませんでした。
参考程度にしてください。
引用返信 編集キー/
■50617 / inTopicNo.6)  Re[5]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ プランタン (5回)-(2010/06/12(Sat) 21:11:23)
やじゅ様、ご回答ありがとうございました。
追加で貼っていただいたリンクが参考になりそうです。

> WebBrowserコントロールの更新の完了のイベントを発生させる
> http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/03/webbrowser_c87c.html

YAS様、リンクの内容を参考にさせていただきたいのですが、
ここで、WebBrowserのRefresh後のExWebBrowserの以下の処理の内容についてご教示いただけないでしょうか?

    MyBase.Refresh()
    While Me.ReadyState = WebBrowserReadyState.Complete
        Application.DoEvents()
    End While
    While Me.ReadyState <> WebBrowserReadyState.Complete
        Application.DoEvents()
    End While

WebBrowserをRefreshした後、

    While Me.ReadyState = WebBrowserReadyState.Complete

でReadyStateがCompleteから変化するまで待ち、ReadyStateが変わったら

    While Me.ReadyState <> WebBrowserReadyState.Complete

でReadyStateがCompleteになればリロード完了の検知ということになると思いますが、
WebBrowserをRefreshした後、すでにReadyStateがCompleteになっていることはないのでしょうか?
(その場合、無限ループになってしまうのではないかと思いますが...)
よろしくお願いします。

引用返信 編集キー/
■50618 / inTopicNo.7)  Re[6]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ YAS (2回)-(2010/06/12(Sat) 22:23:35)
2010/06/12(Sat) 22:29:02 編集(投稿者)
2010/06/12(Sat) 22:27:08 編集(投稿者)

> WebBrowserをRefreshした後、すでにReadyStateがCompleteになっていることはないのでしょうか?
> (その場合、無限ループになってしまうのではないかと思いますが...)
> よろしくお願いします。

試した結果,表示が完了している状態でF5を押した場合,

MyBase.Refresh()

の直後はReadyStateが必ずWebBrowserReadyState.Completeであることがわかっていたので,

While Me.ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
End While

と書いたのですが,その後,Application.DoEvents()が1つあればReadyStateは変化することがわかりましたので,

  MyBase.Refresh()
Application.DoEvents()
While Me.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While

とすれば十分です。

「WebBrowserをRefreshした後、すでにReadyStateがCompleteになっていること」は実験の結果では何度繰り返しても
なかったので,最初のコードでも動作するはずです。Refreshの直後は必ずCompleteで,DoEvents()でLodingに変わります。ただ,あくまでも「DocumentComplete」の状態でリロードしたときの場合です。その他の場合は調査していません。
 何にせよポーリングする場合はタイムアウトの処理が必要だと思います。
引用返信 編集キー/
■50621 / inTopicNo.8)  Re[7]: WebBrowserの表示内容をリロードしたときのイベント
□投稿者/ プランタン (6回)-(2010/06/13(Sun) 00:04:01)
No50618 (YAS さん) に返信
YAS様、ご解説ありがとうございました。
ReadyStateのポーリングで判断を行いたいと思います。
この質問についても解決とさせていただきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -