#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 работает только при начальной нагрузке, но это то, что мне нужно.