使用旧的 UIWebView 时,您可以通过实现自定义 NSURLProtocol 来捕获请求。我用它来处理需要身份验证的请求。
我尝试了相同的代码,它不适用于新的 WKWebView,但我的协议类根本没有被调用。有人遇到同样的问题还是有更好的方法使用 WKWebView 进行身份验证?
未经任何修改,我在decidePolicyForNavigationResponse委托函数中得到401响应。我还尝试使用 NSURLConnection 连接到服务器并使用 NSURLConnectionDataDelegate 处理身份验证。这可行,但 WKWebView 不会获取存储的凭据。
更新了 iOS 11 和 macOS 10.13 的答案
从 iOS 11 开始,可以声明一个符合以下条件的对象:WKURLSchemeHandler
协议并将其注册到WKWebView
配置:-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]
.
旧答案
WKWebView
发出请求并在进程外呈现内容,这意味着您的应用程序不会听到它们发出的请求。如果您缺少某项功能,现在是向 Apple 提交错误报告和/或增强请求的时候了。
从 iOS 10.3 SDK 开始,WKWebView
仍然无法使用自定义NSURLProtocol
使用公共 API。
有进取心的开发人员发现了一个有趣的方法:+[WKBrowsingContextController registerSchemeForCustomProtocol:] https://github.com/WebKit/webkit/blob/master/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm#L103据说它将提供的方案添加到自定义协议处理方案列表中,然后应该与NSURLProtocol
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)