質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2801閲覧

【VB.NET】WebView2のダウンロード先について

Ynn

総合スコア10

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

1グッド

0クリップ

投稿2023/06/13 06:47

編集2023/06/13 07:43

お世話になっております
表題、WebView2を使用したWindowsフォームアプリを製作しております
今回、ファイルのダウンロードにおいてダウンロード先を明示的に指定する必要が出てきまして、その方法についてご教示願いたいです
今回、ファイルのダウンロードにおいて、直接のURL指定ではなく、

VB.NET

1 Await WebView2.ExecuteScriptAsync("document.querySelector('a[href=""javascript:downloadFile(160029731984, 160001341086)""]').click();") 2’(ExecuteScriptAsync内にはjavascriptを書き込みます’

のようにページ内限定のjavascriptを指定してダウンロードを行わなくてはなりません
直接URL指定すると、.NavigationStartingイベント内で

VB.NET

1 Private Sub WebView2Control_NavigationStarting(sender As Object, e As CoreWebView2NavigationStartingEventArgs) Handles WebView2.NavigationStarting 2 ' ダウンロード URL を検出する条件を指定します 3 Dim downloadUrl As String = "ダウンロードするURL" 4 If e.Uri = downloadUrl Then 5 ' ダウンロードをキャンセルします 6 e.Cancel = True 7 8 ' ダウンロード処理を行います 9 Dim filePath As String = "C:\いろいろ" ' 保存先のファイルパスを指定してください 10 11 ' ファイルをダウンロードして保存します 12 Dim wc As New System.Net.WebClient() 13 wc.DownloadFile(downloadUrl, filePath) 14 End If 15 End Sub

のように一度ダウンロードをキャンセルして、.DownloadFileを使ってダウンロード先を指定できるとあったのですが今回はこの方法はできないと思います
情報、ご教示願います


追記
Shikaku’sBlog様の
https://blog.systemjp.net/entry/2021/11/10/105203
の方法で、DownloadStartingイベントを使いましたが「ダウンロードできませんでした -ダウンロードエラー」となり、ダウンロードができませんでした


追記2
開発環境は
Windows10
Visual studio 2019
Windowsフォームアプリ
ターゲットフレームワーク:.NET Framework4.7.2
VB.NET
です

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/06/13 07:37

開発環境を質問欄を編集して追記してください。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか)
退会済みユーザー

退会済みユーザー

2023/06/13 07:43

> ページ内限定のjavascriptを指定してダウンロードを行わなくてはなりません コードを見ると a タグをクリックすると閲覧中のページに組み込んである JavaScript のメソッド downloadFile が動いてダウンロードが始まるということのように見えますがそうなんですか? で、その downloadFile はちゃんと完成していて、閲覧中のページに組み込まれているのですか?
Ynn

2023/06/13 07:45

その認識で大丈夫だと思います downloadFileは完成しており、観覧中のページに組み込まれております
退会済みユーザー

退会済みユーザー

2023/06/13 07:47

そして、ダウンロードしてくる先、すなわち Web サーバー側の準備はできているのですか? 具体的にどのようになっているのでしょう? ちゃんと準備できていれば、その Web サーバーのダウンロード先の URL をブラウザのアドレスバーに入力して要求をかければ、ダウンロードが始まるはずですが、そこまでできているのでしょうか?
退会済みユーザー

退会済みユーザー

2023/06/13 08:16

> その認識で大丈夫だと思います 「思います」という返事は自信なさげに見えますが、間違いなく大丈夫なんでしょうね? 上に「閲覧中のページに組み込んである JavaScript のメソッド downloadFile」と簡単に書きましたけど、閲覧中のページを質問者さんの自由に、かつ相当な手を加えないとできませんし、かなりの知識が必要です。それができる人がここでこのような質問をしてくるというのが不可解ですけど・・・
guest

回答2

0

今回、ファイルのダウンロードにおいてダウンロード先を明示的に指定する必要が出てきまして、その方法についてご教示願いたいです

「ダウンロード先」というのは、クライアントが Web サーバーからダウンロードしてきたファイルを保存する際の、クライアントの PC のフォルダのことですね? (実は、明示的に指定するのは Web サーバーの url のことだと思っていました)

コードを見ると a タグをクリックすると閲覧中のページに組み込んである JavaScript のメソッド downloadFile が動いてダウンロードが始まるということのようですが、その実装はどうなっているのでしょうか?

もし、a タグをクリックした時に NavigationStarting が発生するような実装になっているのであれば、

.NavigationStartingイベント内で

・・・コードは略・・・

のように一度ダウンロードをキャンセルして、.DownloadFileを使ってダウンロード先を指定できるとあったのですが今回はこの方法はできないと思います

というのは「できない」はずはないです。なので、まずは a タグをクリックした時に NavigationStarting が発生するか否かを調べてください。

イベントが発生するのであれば、上記の方法でやりたいことはできるはずです。その方法に実績があって問題ないことが確認できているなら、今まで通り実績のある方法で実装してはいかがですか。

a タグをクリックしても NavigationStarting が発生しない実装になっているとすると(例えば、ajax を使ってダウンロードするとか、window.open で別窓を開いてそこでダウンロードするとかした場合)、DefaultDownloadFolderPath プロパティで保存するフォルダを指定するのが良さそうです。

WebView2 のバージョンが古いと DefaultDownloadFolderPath プロパティは使えないようですので注意してください。現時点での最新版 1.0.1823.32 なら問題なく使えることは確認しました。

使い方は以下の記事の 2 つ目の回答を見てください。

How to Change/Set the download default location of webview in c#
https://stackoverflow.com/questions/67420075/how-to-change-set-the-download-default-location-of-webview-in-c-sharp

投稿2023/06/15 03:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

WebView2のダウンロード先について

webview2 download folder - Google 検索

windows - How to Change/Set the download default location of webview in c# - Stack Overflow

DefaultDownloadFolderPathはどうですか?これでよければ話は早いです。
CoreWebView2Profile.DefaultDownloadFolderPath Property (Microsoft.Web.WebView2.Core) | Microsoft Learn

DownloadStartingイベントを使いましたが「ダウンロードできませんでした -ダウンロードエラー」となり、ダウンロードができませんでした

DownloadStartingも手元で試した限りは動きました(パスをもう一度確認されては?)
CoreWebView2.DownloadStarting Event (Microsoft.Web.WebView2.Core) | Microsoft Learn

(タグもついてるので)C#です^^
JSうんぬんはよくわからないので、ドキュメントのサンプルページで雑にExecute^^;

cs

1using System; 2using System.IO; 3using System.Windows.Forms; 4using Microsoft.Web.WebView2.Core; 5using Microsoft.Web.WebView2.WinForms; 6 7namespace Qhhhcwypqq2492b 8{ 9 public partial class Form1 : Form 10 { 11 private readonly WebView2 webView; 12 13 public Form1() 14 { 15 InitializeComponent(); 16 17 webView = new WebView2 18 { 19 Dock = DockStyle.Fill, 20 Parent = this, 21 }; 22 23 var button = new Button 24 { 25 Dock = DockStyle.Bottom, 26 Parent = this, 27 Text = "Download", 28 }; 29 button.Click += Button_Click; 30 31 InitializeAsync(); 32 } 33 34 async void InitializeAsync() 35 { 36 await webView.EnsureCoreWebView2Async(null); 37 38 webView.CoreWebView2.Profile.DefaultDownloadFolderPath 39 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 40 41 //webView.CoreWebView2.DownloadStarting += CoreWebView2_DownloadStarting; 42 43 webView.CoreWebView2.Navigate("https://demo.smartscreen.msft.net/"); 44 } 45 46 private void CoreWebView2_DownloadStarting(object sender, CoreWebView2DownloadStartingEventArgs e) 47 { 48 //e.Handled = true; 49 e.ResultFilePath = Path.Combine( 50 Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 51 Path.GetFileName(e.ResultFilePath)); 52 } 53 54 private async void Button_Click(object sender, EventArgs e) 55 { 56 await webView.ExecuteScriptAsync("document.querySelector('body > div.container.content > div.container > div:nth-child(5) > div > div:nth-child(1) > a').click();"); 57 } 58 } 59}

投稿2023/06/13 10:47

TN8001

総合スコア10022

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ynn

2023/06/15 05:48

WebView2の初期化完了後 WebView2.CoreWebView2.Profile.DefaultDownloadFolderPath = "C:\いろいろ" を書くことでダウンロードパスを変えることができました ですがDownloadStartingは依然働かず とりあえず、ダウンロードはできるようになったのでこれで当面をしのぎます
退会済みユーザー

退会済みユーザー

2023/06/16 03:46

> ですがDownloadStartingは依然働かず コードを見ると a タグをクリックすると閲覧中のページに組み込んである JavaScript のメソッド downloadFile が動いてダウンロードが始まるということのようですが、その実装はどうなっているのでしょうか? たとえば、window.open で別窓を開いてそこでダウンロードするような実装になっていると、そのイベントは発生しません。 だから聞いているのですから、聞いたことに答えましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問