跨域下载文件
前面介绍了两种在WebViewer主动下载文件的方法,分别是模拟单击按钮和使用DownLoadFile函数。
两个方法都有限制,就是不能跨域。
例如窗口的AfterLoad事件代码设置为:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
wv.CoreWebView2.Navigate("https://www.baidu.com/")
然后增加一个按钮,将代码设置为:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
wv.DownLoadFile("http://www.foxtable.com/lib/images/banner1a.jpg",
"c:\abc\banner.jpg")
单击这个按钮,WebViewer并不会下载图片,而是直接显示图片,这是因为当前域名是baidu.com,而要下载文件来自foxtable.com,二者不同域。
对于这种情况,WebViewer是无能为力的,改用HttpClient下载:
Dim
http
As
New
HttpClient("http://www.foxtable.com/lib/images/banner1a.jpg")
If
http.GetFile("c:\abc\banner.jpg")
=
True
Then
MessageBoxA.Show("下载成功")
Else
MessageBoxA.Show("下载失败")
End
If
HttpClient还有一个异步下载文件的方法GetFileAsync:
'''Async
Dim
http
As
New
HttpClient("https://dldir1v6.qq.com/weixin/Universal/Windows/WeChatWin_4.1.11.exe")
Dim
ret
As
Boolean
=
Await
http.GetFileAsync("c:\abc\banner.exe")
If
ret
Then
MessageBoxA.Show("下载成功")
Else
MessageBoxA.Show("下载失败")
End
If
HttpClient和WebViewer没有任何关系,所以不会触发WebViewer的事件。