c# - 如何在 UWP 中从 web 视图中打开保存文件对话框
问题描述
我已经接管了一个 UWP 项目,并且必须解决下载按钮的问题。在网站上,有一个指向软件包的链接。可以使用浏览器下载 EXE。在我的 webview 中,据我了解,我将无法直接下载到磁盘,但应该可以打开标准浏览器来接管该部分。我设法从我的 webview 在标准浏览器中打开 PDF。这对我和我的菜鸟技能来说已经很棘手,但它现在正在起作用。我对 EXE 文件进行了同样的尝试,但这似乎不起作用。这是我到目前为止所做的:
private async void WebView1_NewWindowRequested(WebView sender, WebViewNewWindowRequestedEventArgs args)
{
if (args.Uri != null && args.Uri.OriginalString.ToLower().Contains(".pdf"))
{
return;
}
else
{ webView1.Navigate(args.Uri); }
args.Handled = true;
}
所以这适用于 PDF,但是当我对 EXE 做同样的事情时,它什么也没做(可见)。
有什么想法吗?
解决方案
如何在 UWP 中从 web 视图中打开保存文件对话框
您可以侦听NavigationStarting
事件处理程序,如果 uri 包含.exe
您可以创建BackgroundDownloader
下载 exe 文件特定文件夹。
private async void TestWebView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
if (args.Uri != null && args.Uri.OriginalString.ToLower().Contains(".exe"))
{
try
{
StorageFile destinationFile = await KnownFolders.PicturesLibrary.CreateFileAsync(
"test.exe", CreationCollisionOption.GenerateUniqueName);
BackgroundDownloader downloader = new BackgroundDownloader();
DownloadOperation download = downloader.CreateDownload(args.Uri, destinationFile);
await download.StartAsync();
}
catch (Exception ex)
{
}
}
}
魔宝解决方案
string Link = args.Uri.Segments.Last();
try
{
var messagedialog = new MessageDialog("Saving File " + Link + " to your Download folder.");
await messagedialog.ShowAsync();
StorageFile destinationFile = await DownloadsFolder.CreateFileAsync(Link, CreationCollisionOption.GenerateUniqueName);
BackgroundDownloader downloader = new BackgroundDownloader();
DownloadOperation download = downloader.CreateDownload(args.Uri, destinationFile);
await download.StartAsync();
}
catch (Exception e)
{
}
推荐阅读
- php - Laravel 在控制器中嵌套子视图的问题
- gradle - 您如何定义变量以排除 build.gradle.kts 中的多个传递依赖项
- mongodb - MongoDB,正确设置 OneToMany、ManyToOne 关系方法
- java - 方法公共摘要的查询验证失败
- typescript - 在生成的 commonjs 包中需要时如何避免使用点表示法访问默认导出的类实例
- android - 权限拒绝:来自 pid=31277、uid=10259 的 getCurrentUser() 需要 android.permission.INTERACT_ACROSS_USERS
- javascript - 如何从 JavaScript 函数返回数组?
- apache - 将 https 域根目录重定向到子文件夹
- c# - 解压缩 gzip 编码的响应
- nginx - gke nginx ingress 创建额外的负载均衡器