2015-09-25 213 views
4

我创建了一个的NSURLRequest(HTTPS)WKWebView空白后,“成功” HTTPS的NSURLRequest

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

“decidePolicyForNavigationAction”在决定处理器

@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我得到正确的网页显示?

干杯,

+0

您是否已将'WKWebView'添加到您的视图层次结构中?如果你要默认使用'.UseCredential',那么你也可以简单地不实现第二个委托方法。 –

+0

@StefanArentz是肯定在层次结构 - 只是没有发生:(它会显示https://www.google.com但不是http://www.google.com - 但会显示www.apple.com和https:/ /www.apple.com – theiOSDude

+0

你是否实现了'didFailNavigation:withError'和'didFailProvisionalNavigation:withError'?如果没有实现这些来检测错误,从工作的链接看来,它们似乎是https URLS,而不是http URL。iOS9中有一项新的安全功能,除非它们符合特殊规则或者您设置xcode以覆盖新功能,否则无法加载http URLS。请参阅http:// stackoverflow。com/questions/32719032/xcode-7-uiwebview-doesnt-load-url/32719408#32719408 –

回答

5

要检测错误,您应确保您执行didFailNavigation:withErrordidFailProvisionalNavigation:withError

从工作的链接看来,它们似乎是https URL。那个不是一个http URL。实现上述错误方法应该告诉你什么是错的。

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

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

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

+0

干杯,但是在我的plist中获得了NSAppTransportSecurity条目,因为没有错误被触发:-(只是完成的导航!嘘,目前我已经回到UIWebView – theiOSDude

+0

@theiOSDude如果我用WKWebView创建一个新项目,并尝试加载http://www.google.com,'didFailProvisionalNavigation:withError'会触发ATS错误。更新Info.plist中的变化,它可以正常工作,可以在ObjC和Swift中使用。你确定你已经实现了这个委托并且正确地更新了plist吗? –

+0

@theiOSDude值得你展示更多代码吗? –

2

我也有这个问题,但发现在培训视频这个解决方案:

  1. 添加字典关键看你的info.plist具有以下名称: NSAppTransportSecurity
  2. 创建一个布尔子键名称为 NSAllowsArbitraryLoads并设置为TRUE。

之后,它在这里工作。

0

确保您WKWebView框设置为在viewDidLoad中积极的高度,因为否则的WebView有没有高度似乎并没有加载前后调整自身:

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