我有一个webview,显示我没有制作的网站,所以我不知道它是如何工作的细节。
在这个网站上有几个按钮,可以下载动态生成的各种文件。以下是其中一个按钮上使用的网址请求示例:test.example.com/Test/Export/Stuff?format=Pdf
这会导致文件在我的桌面浏览器和我的手机Chrome上下载,但我的应用没有任何反应。
我已经在互联网上寻找解决方案,但我无法找到有效的解决方案。
我已尝试按照此处的说明设置DownloadListener:https://forums.xamarin.com/discussion/4605/download-file-by-webview但OnDownloadStart永远不会触发。
我也试过在我的自定义WebViewClient中使用ShouldOverrideUrlLoading拦截url请求,如其他帖子中所描述的那样没有运气。
以下是按钮的html代码:
<input id="exportPdfButton" class="secondary hover" format="Pdf" value="Download (PDF)" name="exportPdfButton" type="submit">
<script id="dxss_848651839" type="text/javascript">
<!--
var dxo = new MVCxClientButton('exportPdfButton');
dxo.InitGlobalVariable('exportPdfButton');
dxo.SetProperties({'autoPostBack':true,'isNative':true});
dxo.SetEvents({'Click':ExportButtonOnClick});
dxo.AfterCreate();
//-->
</script>
我已为ACCESS_DOWNLOAD_MANAGER,WRITE_EXTERNAL_STORAGE等设置权限。
任何人都可以帮我弄清楚我如何在应用程序中下载这些文件?否则,我可以提供任何其他信息来帮助吗?
答案 0 :(得分:0)
任何人都可以帮我弄清楚如何在应用程序中下载这些文件吗?
首先,请确保您的WebView
启用了javascript并正确设置了WebViewClient:
mWebview = FindViewById<WebView>(Resource.Id.mWebview);
mWebview.Download += MWebview_Download;
var client = new WebViewClient();
mWebview.Settings.JavaScriptEnabled = true;
mWebview.SetWebViewClient(client);
mWebview.LoadUrl("your url");
然后在WebView.Download
事件中使用DownloadManager
下载文件:
private void MWebview_Download(object sender, DownloadEventArgs e)
{
var url = e.Url;
DownloadManager.Request request = new DownloadManager.Request(Uri.Parse(url));
request.AllowScanningByMediaScanner();
request.SetNotificationVisibility(DownloadManager.Request.VisibilityVisibleNotifyCompleted); //Notify client once download is completed!
request.SetDestinationInExternalPublicDir(Environment.DirectoryDownloads, "CPPPrimer");
DownloadManager dm = (DownloadManager)GetSystemService("download");
dm.Enqueue(request);
Toast.MakeText(ApplicationContext, "Downloading File",ToastLength.Long//To notify the Client that the file is being downloaded
).Show();
}