'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,我会得到正确的网页显示吗?
干杯,
我也有这个问题,但在培训视频中找到了这个解决方案:
- 使用以下名称将字典键添加到您的 info.plist:
NSAppTransportSecurity
- 为名称创建一个布尔子项
NSAllowsArbitraryLoads 并设置为 TRUE。
之后它在这里工作。
要检测错误,您应该确保实施 didFailNavigation:withError
和 didFailProvisionalNavigation: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 )];
我创建了一个 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,我会得到正确的网页显示吗?
干杯,
我也有这个问题,但在培训视频中找到了这个解决方案:
- 使用以下名称将字典键添加到您的 info.plist: NSAppTransportSecurity
- 为名称创建一个布尔子项 NSAllowsArbitraryLoads 并设置为 TRUE。
之后它在这里工作。
要检测错误,您应该确保实施 didFailNavigation:withError
和 didFailProvisionalNavigation: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 )];