7

当您事先知道请求需要凭据时,我已经看到了许多 询问(并回答)如何提供凭据的问题。

当我加载一个请求身份验证质询的站点时(以 HTTP 401 响应),我UIWebViewDelegate只收到以下回调:webView:shouldStartLoadWithRequest:navigationType:有时webViewDidStartLoad:webViewDidStartLoad:如果我直接导​​航到该站点似乎会被调用,如果我似乎不会被调用) m 重定向到那里)。

通过覆盖-[NSObject respondsToSelector:],接收一些对和的UIWebViewDelegate调用,这可能很有用,但当然这些是私有 API,可能会让我的应用程序被拒绝。uiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource:

我已经测试了几个不同的带有嵌入式UIWebViews 的主流应用程序。到目前为止,只有 Chrome 能够正确处理这些身份验证挑战。我什至设置了自己的服务器并验证了 Chrome 仅POSTs 一次。Twitter 和 Tweetbot 失败只是永远显示加载屏幕,就像我的一样。

除了使用第二个推测之外,还有另一种(可能非常hacky)方法来检测这些身份验证挑战NSURLConnection吗?如果我提出POST请求,那将POST是所有事情的两倍,这很糟糕。

为此,我添加了一个雷达来请求对 UIWebView 进行增强。请复制它。

4

2 回答 2

6

Apple 现在有解决这个问题的示例代码。它看起来也是关于如何正确实现 NSURLProtocol 的最完整的文档。

于 2013-09-23T17:58:38.753 回答
3

您可以在自己的文件中加载所有请求NSURLConnection,然后将数据作为字符串输入到 webview 中。这将允许您拦截连接的所有荣耀并仍然获得本机UIWebView渲染。我不确定它是否可以很好地在数据到达时将数据流式传输到 Web 视图中,但希望我们在这里没有谈论太多数据。

于 2013-04-26T15:03:03.713 回答