如何在 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;
}
}
}
参考
我在 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;
}
}
}
参考