Я использую новый элемент управления WebView2 (который находится в предварительной версии для разработчиков) для замены элемента управления WebBrowser в приложении Windows .Forms.
Основная причина перехода на элемент управления WebView2 заключается в том, что он основан на Chromium, который работает с WebRT C, тогда как элемент управления WebBrowser работает на Inte rnet Explorer, который не поддерживает WebRT C.
Итак, у меня возникла проблема - найти способ установить повар ie для URL-адреса, по которому я хочу, чтобы WebView2 перешел. Раньше при использовании WebBrowser файлы cookie можно было установить, вызвав InternetSetCook ie перед webBrowser.Navigate, но InternetSetCook ie работает только с Inte rnet Explorer.
Cook ie должен быть настроен для аутентификации на стороннем веб-сайте, то есть, чтобы доказать веб-сайту, что мое приложение уже вошло в систему (сделано несколькими моментами ранее другими частями моего приложения, которые не используют WebView2). Приложение успешно захватывает auth cook ie в ответе на вход, но я просто не могу найти, как передать cook ie обратно на веб-сайт при навигации с помощью элемента управления WebView2. Элемент управления WebView2 используется для перехода на другую страницу на том же веб-сайте, где используется WebRT C.
https://github.com/MicrosoftEdge/WebViewFeedback/issues/4 объясняет, что не существует быстрого механизма для настройки файлов cookie в WebView2 пока что, но предлагает обработать событие WebResourceRequested, а затем установить cook ie, изменив request.Header из обработчика событий WebResourceRequested.
Итак, кто-нибудь может объяснить, как на самом деле запустить событие WebResourceRequested для WebView2, пожалуйста? Я безуспешно пробовал это:
private string myUrl = "https://www.somedomain.com";
private void WebView_CoreWebView2Ready(object sender, EventArgs e)
{
webView.CoreWebView2.AddWebResourceRequestedFilter(myUrl,CoreWebView2WebResourceContext.All);
webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
}
private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
{
Uri myUri = new Uri(myUrl);
if (myUri.IsBaseOf(e.Request.RequestUri))
{
e.Request.Headers.Add("Cookie", cookieName, authToken);
}
}
Событие WebResourceRequested никогда не срабатывает. Я попытался заставить его сработать, вызвав WebView2.Navigate, WebView2.CoreWebView2.Navigate и WebView2.Source, но ни один из них не вызывает срабатывания события WebResourceRequested.
Причина, по которой я подключаю обработчик событий для WebResourceRequested из события WebView_CoreWebView2Ready, заключается в том, что если вы попытаетесь подключить его раньше (например, при загрузке формы), CoreWebView2 будет иметь значение null, потому что для этого требуется больше времени. Я успешно подключил другие события внутри WebView_CoreWebView2Ready, и они сработали (например, событие NavigationStarting).
Спасибо.