使用旧的 UIWebView 时,您可以通过实现自定义 NSURLProtocol 来捕获请求。我用它来处理需要身份验证的请求。
我尝试了相同的代码,但它不适用于新的 WKWebView,但我的协议(protocol)类根本没有被调用。有人遇到同样的问题还是有更好的方法使用 WKWebView 进行身份验证?
在没有任何修改的情况下,我在 decidePolicyForNavigationResponse 委托(delegate)函数中得到了 401 响应。我还尝试使用 NSURLConnection 连接到服务器并使用 NSURLConnectionDataDelegate 处理身份验证。这行得通,但存储的凭据不会被 WKWebView 获取。
最佳答案
iOS 11 和 macOS 10.13 的更新答案
从 iOS 11 开始,可以声明一个符合 WKURLSchemeHandler
协议(protocol)的对象,并将其注册到 WKWebView
配置中:-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme :]
。
旧答案
WKWebView
发出请求并在进程外呈现内容,这意味着您的应用不会听到它们发出的请求。如果您缺少某个功能,现在是向 Apple 提交错误报告和/或增强请求的时候了。
从 iOS 10.3 SDK 开始,WKWebView
仍然无法通过公共(public) API 使用自定义 NSURLProtocol
。
有进取心的开发人员发现了一个有趣的方法:
+[WKBrowsingContextController registerSchemeForCustomProtocol:]
它应该将提供的方案添加到自定义协议(protocol)处理方案列表中,然后应该与 NSURLProtocol
一起使用。
关于ios - WKWebView 和 NSURLProtocol 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208229/