如何在 Xamarin Forms 中从 webview 拦截 "a redirect URL"

How to intercept "a redirect URL" from webview in Xamarin Forms

我在 WebView 中显示一个 OAtuh2 HTML 页面,returns 我点击此页面上的验证按钮后,我想要一个重定向 URL拦截以使用其中的信息。

在 XML 文件中

<ContentPage.Content>
    <WebView x:Name="browser"></WebView>
</ContentPage.Content>

在 CS 文件中

browser.Source = "https://myUrl";

我对 Xamarin 的了解不多,不知道该怎么做

感谢您的帮助

您可以像 ToolmakerSteve 提到的那样使用 WebNavigatingEventArgs

有关详细信息,您可以使用自定义渲染器在每个特定平台上实现它。

iOS

[assembly: ExportRenderer(typeof(WebView), typeof(MyRenderer))]
namespace FormsApp.iOS
{
    class MyRenderer : WkWebViewRenderer
    {

        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            this.NavigationDelegate = new MyDelegate();
        }
    }

    public class MyDelegate : WKNavigationDelegate
    {
        public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
        {
            if(navigationAction.NavigationType == WKNavigationType.Other)
            {
                if(navigationAction.Request.Url != null)
                {
                    //do something
                }
                decisionHandler(WKNavigationActionPolicy.Cancel);
                return;
            }
            decisionHandler(WKNavigationActionPolicy.Allow);
        }
    }
}

Android

[assembly: ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(MyRenderer))]
namespace FormsApp.Droid
{
    class MyRenderer : WebViewRenderer
    {
        public MyRenderer(Context context):base(context)
        {

        }

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.SetWebViewClient(new MyClient());
            }
        }
    }

    public class MyClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            //do something
            return true;
        }
    }
}

参考