Событие навигации Xamarin.macOS не срабатывает для CustomWebView

#macos #xamarin #xamarin.mac

Вопрос:

Я создал пользовательский визуализатор для своего веб-представления, потому что мне нужно установить свойство CustomUserAgent. Но для моего пользовательского веб-просмотра событие, по которому осуществляется навигация, не запускается. Как я понимаю, мне нужно установить NavigationDelegate, но я не могу найти ни одного рабочего примера. Вот мой код:

 [assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))] namespace DesktopClient.MacOS.CustomRenderers {  public class CustomWebViewRenderer : ViewRendererlt;CustomWebView, WKWebViewgt;  {  private WKWebView wkWebView;   protected override void OnElementChanged(ElementChangedEventArgslt;CustomWebViewgt; e)  {  base.OnElementChanged(e);    if (this.Control == null)  {  WKWebViewConfiguration config = new();    this.wkWebView = new WKWebView(this.Frame, config)  {  NavigationDelegate = new WKNavigationDelegate()  };   this.SetNativeControl(this.wkWebView);   WKWebViewContainer.WKWebView = this.wkWebView;  }   if (e.NewElement != null)  {  UrlWebViewSource source = (UrlWebViewSource)e.NewElement.Source;   if (source != null)  {  this.Control.LoadRequest(new NSUrlRequest(new NSUrl(source.Url)));  }    this.Control.CustomUserAgent = e.NewElement.UserAgent;  this.wkWebView.NavigationDelegate = new WKNavigationDelegate();  }  }  } }  

Ответ №1:

Создайте новый класс ,унаследованный от WKNavigationDelegate и назначенный Webview.NavigationDelegate , а затем вы можете переопределить метод, как DidFinishNavigation в новом классе .

Пример кода

 NavigationDelegate = new MyDelegate();  public class MyDelegate : WKNavigationDelegate {   public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation)  {    } }  

Однако я обнаружил , что метод DidFinishNavigation не срабатывает при начальной загрузке ,он может срабатывать только при переходе на другую веб-страницу.

Комментарии:

1. Спасибо! Странно, в моем случае метод DidFinishNavigation работает только при начальной нагрузке, но это то, что мне нужно.