在最新的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一起工作就可以了...非常非常奇怪!