Xamarin IOS WebView OverrideUrlLoading

k4ymrczo  于 2023-03-27  发布在  iOS
关注(0)|答案(1)|浏览(151)

我有一个网页,当我去它重定向到几个页面,然后回来。同时,我需要检查一些字段与queryString。我完成了这项工作的Xamarin.Android. ShouldOverrideUrlLoading方法为我工作。我准备了Xamarin.IOS的webview,但我不能使用像ShouldOverrideUrlLoading方法。
我是为xamarin试的andriod

public class LoginActivity : AppCompatActivity
{
    private WebView WebViewLogin;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        WebViewLogin = FindViewById<WebView>(Resource.Id.WebViewLogin);
        ........
        WebViewLogin.LoadUrl("https://samplelogin.com");
        WebViewLogin.SetWebViewClient(new TeletipWebViewClient());
    }
}


 public class CustomWebViewClient : WebViewClient
    {
        public CustomWebViewClient()
        {
            
        }
        public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
        {
            string url = request.Url.ToString();
            if(url.Contains("loginok")){}//Gratz...
            view.LoadUrl(url);
            return false;
        }
    }

我完成了android。上面的代码工作。但我找不到Xamarin.IOS要做什么。我加载了WebView,但当URL地址更改时,我无法捕获事件。

xxb16uws

xxb16uws1#

WKNavigationDelegate中可以看到webCView:decidePolicyForNavigationAction:decisionHandler:,API:WKNavigationDelegate.DecidePolicy方法
例如:

wKWebView.NavigationDelegate = new CustomWkWebViewNavigationDelegate();
//set delegate for the webview. You can find your WKWeview on the ViewController.
//With Xamarin.Forms, you should find the native WKWeview in WkWebViewRenderer

自定义WKNavigationDelegate

public class CustomWkWebViewNavigationDelegate : WKNavigationDelegate
    {
        public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
        {
            NSUrlRequest request = navigationAction.Request;
            string urlString = request.Url.AbsoluteString;
            if (urlString.Contains("loginok")) {
                decisionHandler(WKNavigationActionPolicy.Allow);
            }else{
                decisionHandler(WKNavigationActionPolicy.Cancel);
            }
        }
    }

相关问题