DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowser で DocumentCompleted が2回呼ばれるのはなぜ?

環境/言語:[C#]
分類:[.NET]

WebBrowser でPDFファイルを開こうとすると
DocumentCompleted が2回呼ばれます。
(HTMLファイルのときは1回)

http://msdn2.microsoft.com/ja-jp/library/ms229657(VS.80).aspx

にこうあります。

>Microsoft Windows CE 5.0 を実行する Pocket PC または Smartphone 以外のデバイスでは、新しい URL にアクセスすると、Navigated イベントおよび >DocumentCompleted イベントの両方が 2 回発生します。このエラーは、Windows CE の将来のリリースで修正される予定です。

既知のバグって事なのでしょうか?

でも今、
Win2000 SP4、AdobeReader6.0.1で起きています。

でも、別のPCを上記と同じ条件でセットアップしても
2回呼びません。

メーカー依存なのでしょうか・・

処理としては、
DocumentCompletedイベントの内部で
ダウンロードし終わったサーバーのファイルを削除しています。

でも2回呼ばれている場合、
1回目の DocumentCompletedイベントでこのファイルを削除すると
404エラーになるときがあるみたいです。

でもダウンロード中でファイルをつかんでいる場合は削除できませんから、
ダウンロードは終わっているはずだと認識できます・・

また、サーバーのファイル削除処理のWebサービスをコールする前に
数秒ほどSleepさせてみると404エラーがでなくなりました。

この現象について何かわかるかたご教授ください。
お願いします。
フレームのあるページなどではDocumentCompletedイベントが複数回呼ばれます。
そのような場合には、私は以下のようなコードでページがすべて読み込まれたのか
を判断しています。

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
If DirectCast(sender, WebBrowser).Url = e.Url Then
Debug.Print(e.Url.ToString)
End If
End Sub

対象はPDFとのことですので別の要因が考えられますが,
「複数回DocumentCompletedが呼ばれる」という点が共通していたので
参考になれば幸いです。

なお,私の環境ではPDFを表示してもDocumentCompletedイベントは
複数回呼ばれませんでした。
■No18563に返信(YASさんの記事)
> フレームのあるページなどではDocumentCompletedイベントが複数回呼ばれます。
> そのような場合には、私は以下のようなコードでページがすべて読み込まれたのか
> を判断しています。
>
> Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
> If DirectCast(sender, WebBrowser).Url = e.Url Then
> Debug.Print(e.Url.ToString)
> End If
> End Sub
>
> 対象はPDFとのことですので別の要因が考えられますが,
> 「複数回DocumentCompletedが呼ばれる」という点が共通していたので
> 参考になれば幸いです。

ありがとうございます!勉強になります!

> なお,私の環境ではPDFを表示してもDocumentCompletedイベントは
> 複数回呼ばれませんでした。

わざわざ試してくださったんですね、
本当にありがとうございます!

私も他に4台ほど試してみたのですが(XP、2003srv、2000など)、
さらにAdobeもバージョンを変えたりしてみたのですが、
その4台は1回しか呼ばれませんでした。。

なぜ2回呼ばれているのか・・・
しかも開いているのはまったく同じPDFファイルだし・・
再現するその端末をOSの再インストールからやり直してみても直らず・・

奇妙な現象です。。

DOBON.NET | プログラミング道 | プログラミング掲示板