ios - WKWebView 和 NSURLProtocol 不工作

标签 ios uiwebview swift ios8 wkwebview

使用旧的 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/

相关文章:

iphone - 当用户点击返回时,如何将下一个文本字段设置为编辑焦点?

ios - UIWebView 在用户点击链接标签时禁用高亮

ipad - 是否有 UIWebView 的替代方案来动态显示格式化文本?

ios - 数组打印 API 调用的相同结果

Swift:核心数据在 TableView 中显示唯一记录

iOS( swift ): Location of touch event in UIButton programatically

ios - 获取非空智能相册

ios - Swift 委托(delegate)和协议(protocol)不起作用

ios - 快速获取webview的滚动位置

objective-c - Parse.com includeKey 与 PFFile