Xamarin IoS 12更新:WKWebView自定义渲染器问题

时间:2018-11-21 14:12:06

标签: ios xamarin.forms wkwebview custom-renderer

在最新的OS更新之后,我在IoS上遇到了一个Xamarin Forms应用程序的怪异问题。基本上,此应用程序使用WebView渲染器浏览具有NTLM身份验证的公司的Intranet门户。我实施了Web渲染器来处理身份验证过程,直到几周前它仍能正常工作,但是在Apple的最新更新之后,Webview停止了工作。 不幸的是,SDK中没有错误代码,异常或显式消息,并且身份验证过程正在运行(我可以从日志中看到),而webview的内容全部为空白。 我也尝试过导航到其他网站(未经身份验证)(bing.com,google.com,xamarin.com),但问题仍然存在。

有人有什么建议或提示吗?

更新

经过深入调查,我终于找到了问题!实际上,当使用自定义渲染器处理身份验证方案时,在弃用UIWebview之后,您似乎无法跳过HTTP 200响应(如前所述),否则该组件将不会加载html内容!

这就是我以前在自定义渲染器中所拥有的:

public override void DecidePolicy(WKWebView webView, WKNavigationResponse navigationResponse, Action<WKNavigationResponsePolicy> decisionHandler)
    {
        var url = navigationResponse?.Response?.Url;
        if (url == null) return;

        if (navigationResponse.Response is NSHttpUrlResponse)
        {
            var resp = navigationResponse.Response as NSHttpUrlResponse;
            if (resp.StatusCode == 200) return;
            HandleHttpResponse(resp);
            decisionHandler(WKNavigationResponsePolicy.Allow);

        }
        else if (navigationResponse.Response is NSUrlResponse)
        {
            //todo handle this case too if we want to open excel files in webview
            //UIApplication.SharedApplication.OpenUrl(url);
            decisionHandler(WKNavigationResponsePolicy.Cancel);
        }

    }

这就是我所做的更改:

var resp = navigationResponse.Response as NSHttpUrlResponse;
//if (resp.StatusCode == 200) return;
HandleHttpResponse(resp);
decisionHandler(WKNavigationResponsePolicy.Allow);

只需注释一下StatusCode 200的if并让它与DecisionHandler一起工作就可以了...非常非常奇怪!

0 个答案:

没有答案