Пустой WKWebView после «успешного» 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")
}

так как я не получаю никаких ошибок after'didFinishNavigation' Я не уверен, что происходит, так как мой WebView все еще пуст? Если я использую UIWebView, я получаю правильную веб-страницу?

Ваше здоровье,


person theiOSDude    schedule 25.09.2015    source источник
comment
Вы добавили WKWebView в иерархию представлений? Если вы собираетесь по умолчанию использовать .UseCredential, вы также можете просто не реализовывать второй метод делегата.   -  person Stefan Arentz    schedule 28.09.2015
comment
@StefanArentz да, определенно в иерархии - просто этого не происходит :( он покажет google.com, но не google.com, но будет показывать www.apple.com и apple.com   -  person theiOSDude    schedule 28.09.2015
comment
Вы реализуете didFailNavigation:withError и didFailProvisionalNavigation:withError? Если не реализовать их для обнаружения ошибок. Судя по ссылкам, которые работают, это URL-адреса https. Тот, который не является URL-адресом http. В iOS9 есть новая функция безопасности, которая не может загружать URL-адреса http, если они не соответствуют специальным правилам или если вы не настроили xcode для переопределения новой функции. См. stackoverflow.com/questions /32719032/   -  person Rory McKinnel    schedule 28.09.2015
comment
@RoryMcKinnel да, реализовал это, но я не получаю никаких ошибок. Хотя я знаю об этой новой функции HTTPS, я проверю, имеет ли это значение. Благодарность :)   -  person theiOSDude    schedule 30.09.2015
comment
Инструмент, который стоит попробовать для отладки происходящего, — Charles (charlesproxy.com). Если вы его не использовали, он действует как прокси для всего веб-трафика, поэтому вы можете видеть все запросы и ответы. Удобно, если вы знаете, что на самом деле делает UIWebView/WkWebView под капотом. Может или не может показать вам что-нибудь. Бесплатная пробная версия, которая удобна для быстрой отладки.   -  person Rory McKinnel    schedule 30.09.2015
comment
@RoryMcKinnel все равно заставил Чарльза работать, что облегчает жизнь за огромным прокси-сервером для совместной работы, так что я посмотрю :) спасибо   -  person theiOSDude    schedule 01.10.2015


Ответы (3)


Чтобы обнаружить ошибки, вы должны убедиться, что вы реализуете 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

person Rory McKinnel    schedule 29.09.2015
comment
Ура, но я получил запись NSAppTransportSecurity в моем plist, так как ошибок не возникает :-( только законченная навигация! Бу, в настоящее время я вернулся к UIWebView - person theiOSDude; 01.10.2015
comment
@theiOSDude Если я создам новый проект с WKWebView и попытаюсь загрузить google.com, didFailProvisionalNavigation:withError сработает с ATS ошибка. Когда я обновляю Info.plist с отмеченными изменениями, он работает нормально. Работает как в ObjC, так и в Swift. Вы уверены, что реализовали этот делегат, а также правильно обновили plist? - person Rory McKinnel; 02.10.2015
comment
Не работает. По-прежнему отображается пустой белый экран после успешного запроса js target="_blank". - person felixwcf; 01.02.2018

У меня тоже была эта проблема, но я нашел это решение в обучающем видео:

  1. Добавьте ключ словаря в свой файл info.plist со следующим именем: NSAppTransportSecurity.
  2. Создайте логический подраздел с именем NSAllowsArbitraryLoads и установите значение TRUE.

После этого здесь заработало.

person user5388594    schedule 29.09.2015

Убедитесь, что ваш фрейм WKWebView имеет положительную высоту в viewDidLoad, потому что в противном случае веб-просмотр не имеет высоты и, похоже, не изменяет свой размер после загрузки:

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