You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.iOS WebView如何捕获URL变化?替代Android的ShouldOverrideUrlLoading

Xamarin.iOS 捕获WebView URL变化并检查QueryString的解决方案

在Xamarin.iOS中,对应Android里ShouldOverrideUrlLoading的功能,根据你使用的WebView组件不同,有两种主流实现方式,优先推荐苹果官方主推的WKWebView:

使用WKWebView(推荐)

通过设置WKNavigationDelegate并重写DecidePolicy方法,可以拦截所有导航请求(包括重定向过程中的URL),从而检查QueryString字段:

1. 初始化WKWebView并设置代理

using WebKit;

public class LoginViewController : UIViewController
{
    private WKWebView _webView;

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        // 配置WKWebView参数
        var webConfig = new WKWebViewConfiguration();
        _webView = new WKWebView(View.Bounds, webConfig);
        // 设置自定义导航代理
        _webView.NavigationDelegate = new CustomWKNavigationDelegate();

        // 加载目标登录页面
        var loginUrl = new NSUrl("https://samplelogin.com");
        _webView.LoadRequest(new NSUrlRequest(loginUrl));

        View.AddSubview(_webView);
    }
}

2. 自定义WKNavigationDelegate处理URL检查

public class CustomWKNavigationDelegate : WKNavigationDelegate
{
    public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
    {
        // 获取当前请求的完整URL
        string currentUrl = navigationAction.Request.Url.ToString();

        // 检查URL中的目标QueryString字段
        if (currentUrl.Contains("loginok"))
        {
            // 此处添加你的业务逻辑,比如解析参数、处理登录成功逻辑等
        }

        // 允许WebView继续加载该URL,若需阻止则传入WKNavigationActionPolicy.Cancel
        decisionHandler(WKNavigationActionPolicy.Allow);
    }
}

使用旧版UIWebView(不推荐,已弃用)

如果仍在使用已被苹果弃用的UIWebView,可以通过重写UIWebViewDelegate的ShouldStartLoad方法实现:

public class CustomUIWebViewDelegate : UIWebViewDelegate
{
    public override bool ShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
    {
        string currentUrl = request.Url.ToString();
        
        if (currentUrl.Contains("loginok"))
        {
            // 处理业务逻辑
        }

        // 返回true允许加载,返回false则阻止当前URL加载
        return true;
    }
}

说明

  • WKWebView的DecidePolicy方法会在每次导航(包括重定向跳转)前触发,完全覆盖你在Android中ShouldOverrideUrlLoading的需求场景,且性能更优。
  • 处理完URL检查逻辑后,必须调用decisionHandler来告知WebView是否允许继续加载当前请求。

内容的提问来源于stack exchange,提问作者Amazon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:37:46