VB.NET2003で、ActiveX の WebBrowser を使っています。
AxWebBrowser1_DocumentCompleteでマルチフレームのページの読み終わりを判断し、特定フレームのリンクを順次クリックしていこうと思っています。
しかし、上記のイベントは、マルチフレームの各フレームのダウンロード開始時点で「それぞれ」発生するようです。
マルチフレームの中の特定のフレーム(名前は分かっています)または、全部のフレームの読み終わりでイベントが発生するイベントハンドラはないでしょうか?
また、上記のAxWebBrowser1_DocumentCompleteでも、特定フレームの読み終わりや全フレームの読み終わりが判断できれば、それでもいいのですが。
ご存じの方、簡単な方法があったら教えてください。
イベントの引数から判断できませんか?
TrueとFalseのフラグを立てて,
Private Sub Command1_Click()
blnFlag = True
WebBrowser1.Navigate2 "URL"
End Sub
Private Sub WebBrowser1_DocumentComplete()
If blnFlag = True Then
Frames = Frames + 1 'フレームが読み込まれる回数をカウントします
If Frames=3 Then ’3回読み込まれたら
MsgBox "完了"
End If
End If
End Sub
という感じでできますよ^^
# ハイライトさんのコードが、VB6用の物に見えるのは気のせい?(汗)
> しかし、上記のイベントは、マルチフレームの各フレームの
> ダウンロード開始時点で「それぞれ」発生するようです。
ダウンロード開始時 に発生するのは、DownloadBegin イベントですよね。
DocumentComplete は、ダウンロード完了後、それぞれの文書の解析
(.Document への読み込み)が完了した時点で発生します。
それと、フレーム単位という話においては、WebBrowser_V1 に、
FrameBeforeNavigate / FrameNavigateComplete というイベントが
あるのですが、今回の目的では使えないでしょう。
AxWebBrowser1.Document 経由で辿るのであれば、やはり、DocumentComplete の
発生を待った方が良いと思います。各フレームのどの文書が読み込まれているのかは、
イベント引数 の URL から判断する事ができます。
たとえば、WithEventsな変数を、「As SHDocVw.WebBrowserClass」や
「As SHDocVw.WebBrowser」にて宣言していた場合には、
If Hoge.Equals(URL) Then
'読み込み完了
End If
のようにして判定できます。
# 上記の "URL" は、DocumentCompleteイベントの第二引数、
# "Hoge" は、 Navigate(またはNavigate2) に使った URL文字列です。
あるいは、WithEvents 変数が、「As AxSHDocVw.AxWebBrowser」で
宣言されていた場合(通常はこちらでしょうね)には、
If HOGE.Equals(e.URL) Then
'読み込み完了
End If
という感じですね。
# 上記の "e" は、DocumentCompleteイベントの第2引数、
# "Hoge" は、 Navigate(またはNavigate2) に使った URL文字列です。
魔界の仮面弁士さん、ハイライトさん、さっそくのご指導ありがとうございました。e.uRlの内容を判定する方法でうまくいきました。
ありがとうございました!!
ツイート | ![]() |