'successful' HTTPS NSURLRequest 后 WKWebView 空白

WKWebView blank after 'successful' HTTPS NSURLRequest

我创建了一个 NSURLRequest (HTTPS)

WKWebView 的委托回调成功返回,没有错误。

'decidePolicyForNavigationAction' 由决策处理程序中的 Allow Enum 提供

   @available(iOS 8.0, *)
    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {

        decisionHandler(.Allow)

    }

didReceiveAuthChallenge 是这样处理的:

@available(iOS 8.0, *)
func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge,
    completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
        let cred = NSURLCredential.init(forTrust: challenge.protectionSpace.serverTrust!)
        completionHandler(.UseCredential, cred)
        print("Did receive auth challenge")
}

因为我在 'didFinishNavigation' 之后没有收到任何错误 我不确定发生了什么问题,因为我的 WebView 仍然是空白的?如果我使用 UIWebView,我会得到正确的网页显示吗?

干杯,

我也有这个问题,但在培训视频中找到了这个解决方案:

  1. 使用以下名称将字典键添加到您的 info.plist: NSAppTransportSecurity
  2. 为名称创建一个布尔子项 NSAllowsArbitraryLoads 并设置为 TRUE。

之后它在这里工作。

要检测错误,您应该确保实施 didFailNavigation:withErrordidFailProvisionalNavigation:withError

从可用的链接来看,它们似乎是 https URLs。没有的是 http URL。实现上面的错误方法应该会告诉你哪里出了问题。

iOS9 中有一项新的安全功能无法加载 HTTP URLs,除非服务器符合特定的规则集或您设置 xcode 覆盖新功能.您可以通过将以下内容添加到 Info.plist 文件来覆盖新功能。只需在底部粘贴以下内容:

<key>NSAppTransportSecurity</key>  
<dict> 
   <key>NSAllowsArbitraryLoads</key><true/>  
</dict> 

这会覆盖所有新功能。但是,您可以执行更具体的覆盖。有关更改的 Apple 技术说明在此处:https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

确保您的 WKWebView 框架在 viewDidLoad 中设置为正高度,否则 webview 没有高度并且在加载后似乎不会自行调整大小:

_webView =[[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height )];