У меня есть приложение WinForms2 C# с базовым компонентом WebView2 и текстовым полем (который будет использоваться в качестве панели поиска). Я хочу ограничить возможность загрузки контента с помощью webView2. Например, если я зайду на pixabay.com и попытаюсь загрузить изображение, я хочу, чтобы оно остановило загрузку и ограничило загрузку этого изображения.
Я попытался использовать методы CloseDefaultDownloadDialog и webView.CoreWebView2.IsDefaultDownloadDialogOpenChanged, чтобы заблокировать загрузку контента:
webView.CoreWebView2.IsDefaultDownloadDialogOpenChanged += downloadsPrompted;
и это:
private void downloadsPrompted(object sender, object e)
{
button1.Text = "It runs";
WebView2 webView = sender as WebView2;
if (webView.CoreWebView2.IsDefaultDownloadDialogOpen)
{
webView.CoreWebView2.CloseDefaultDownloadDialog();
}
}
Однако это не сработало, и изображение все равно загружалось. У меня есть button1.Text = "Он работает"; чтобы убедиться, что этот метод действительно запущен (и он запущен).
CoreWebView2.CloseDefaultDownloadDialog() предназначен для закрытия диалогового окна загрузки, а не для остановки или предотвращения уже инициированной загрузки.
Как вы испытали, когда этот метод вызывается, уже слишком поздно: загрузка уже началась. Если вы просто закроете диалоговое окно, запрошенный файл будет сохранен в расположении по умолчанию (папка загрузки пользователя).
Вместо этого вы можете обработать событие DownloadStarting, которое связано с фактическим запросом на загрузку.
Это событие возникает до начала загрузки.
Затем вы можете установить свойство e.CancelCoreWebView2DownloadStartingEventArgs
на true
, чтобы полностью отменить загрузку:
[WebView2].CoreWebView2.DownloadStarting += CoreWebView2_DownloadStarting;
// [...]
private void CoreWebView2_DownloadStarting(object? sender,
CoreWebView2DownloadStartingEventArgs e) {
e.Cancel = true;
}
Это также устанавливает состояние CoreWebView2DownloadState в Interrupted
и InterruptReason
- CoreWebView2DownloadInterruptReason - в UserCanceled
.
Также может быть интересно увидеть функциональность члена e.DownloadOperation , который позволяет приостанавливать и возобновлять загрузку (если CanResume истинно), перенаправлять файл на лету (на что-то отличное от [WebView2].CoreWebView2.Profile.DefaultDownloadFolderPath), получите количество полученных байтов относительно общего количества полученных байтов и т. д.