webview2でファイルのダウンロード完了を待つ方法

webページのダウンロード待ちではなくて、PCにファイルをダウンロードするときの処理。

DevTools Protocolを使う。

ダウンロードを始めてから
m_downloadState をみてcompletedかcanceledかになるまで待つようにすればOK

Private m_downloadState As String

...

Private Sub CoreWebView2_DevToolsProtocolEventReceived(sender As Object, e As CoreWebView2DevToolsProtocolEventReceivedEventArgs)

    If InStr(e.ParameterObjectAsJson, """state"":""completed""") <> 0 Then
        m_downloadState = "completed"
    ElseIf InStr(e.ParameterObjectAsJson, """state"":""inProgress""") <> 0 Then
        m_downloadState = "inProgress"
    ElseIf InStr(e.ParameterObjectAsJson, """state"":""canceled""") <> 0 Then
        m_downloadState = "canceled"
    Else
        m_downloadState = ""
    End If

End Sub

...

Await FormE.view2.CoreWebView2.CallDevToolsProtocolMethodAsync("Page.enable", "{}")

AddHandler FormE.view2.CoreWebView2.GetDevToolsProtocolEventReceiver("Page.downloadProgress").DevToolsProtocolEventReceived, AddressOf CoreWebView2_DevToolsProtocolEventReceived

ネタ元

github.com