首页 > 解决方案 > 如何在 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 做同样的事情时,它什么也没做(可见)。

有什么想法吗?

标签: c#uwp

解决方案


如何在 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)
 {


 }

推荐阅读