2015-09-25 2 views
4

Я создал NSURLRequest (HTTPS)WKWebView пустым после «успешной» HTTPS NSURLRequest

Делегат обратные вызовы для 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, я получаю правильную веб-страницу, показывающую?

Приветствия,

+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. В iOS9 есть новая функция безопасности, которая не загружает http URLS, если они не соответствуют специальным правилам или вы не устанавливаете xcode для переопределения новой функции. См. http: // stackoverflow.com/questions/32719032/xcode-7-uiwebview-doesnt-load-url/32719408 # 32719408 –

ответ

5

Чтобы обнаружить ошибки, вы должны убедиться, что вы реализуете didFailNavigation:withError и didFailProvisionalNavigation:withError.

Из ссылок, которые работают, они, по-видимому, являются URL-адресами https. Тот, который не является URL-адресом http. Внедрение вышеуказанных методов ошибок должно сказать вам, что не так.

В iOS9 есть новая функция безопасности, которая не загружает URL-адреса HTTP, если только сервер не соответствует определенному набору правил или вы не устанавливаете 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

+0

Приветствия, но получил запись NSAppTransportSecurity в моем plist, так как никаких ошибок не уволили :-(только законченная навигация одна! Boo, в настоящее время я вернулся к UIWebView – theiOSDude

+0

@theiOSDude Если я создаю новый проект с WKWebView и попытаюсь загрузить http://www.google.com, 'didFailProvisionNavigation: 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)]; 
Смежные вопросы