2015-09-05 2 views
3

Мне нужно сделать приложение в ios в простом веб-обзоре. Я использую example недавно обновленный ios 8.4.1. После обновления приложение перестает работать, отображает черный экран.ios 8.4.1 webview black screen

import UIKit 
import WebKit 

class ViewController: UIViewController, WKNavigationDelegate { 
    var webView: WKWebView? 

    /* Start the network activity indicator when the web view is loading */ 
    func webView(webView: WKWebView, 
    didStartProvisionalNavigation navigation: WKNavigation){ 
     UIApplication.sharedApplication().networkActivityIndicatorVisible = true 
    } 

    /* Stop the network activity indicator when the loading finishes */ 
    func webView(webView: WKWebView, 
    didFinishNavigation navigation: WKNavigation){ 
     UIApplication.sharedApplication().networkActivityIndicatorVisible = false 
    } 

    func webView(webView: WKWebView, 
    decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, 
    decisionHandler: ((WKNavigationResponsePolicy) -> Void)){ 

     print(navigationResponse.response.MIMEType) 

     decisionHandler(.Allow) 

    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    /* Create our preferences on how the web page should be loaded */ 
    let preferences = WKPreferences() 
    preferences.javaScriptEnabled = false 

    /* Create a configuration for our preferences */ 
    let configuration = WKWebViewConfiguration() 
    configuration.preferences = preferences 

    /* Now instantiate the web view */ 
    webView = WKWebView(frame: view.bounds, configuration: configuration) 

    if let theWebView = webView{ 
     /* Load a web page into our web view */ 
     let url = NSURL(string: "http://www.apple.com") 
     let urlRequest = NSURLRequest(URL: url!) 
     theWebView.loadRequest(urlRequest) 
     theWebView.navigationDelegate = self 
     view.addSubview(theWebView) 

    } 

    } 

} 

Если какой-либо примерный код?

спасибо.

screenshot

ответ

3

У меня был подобный вопрос случается в нашем приложении. Это, как я ее решил в Objective-C:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    NSLog(@"request.URL.scheme: %@", request.URL.scheme); 

    BOOL calledForReload = NO; 

    if ([[request.URL.scheme lowercaseString] isEqualToString:@"about"]) { 
     //have we used reload yet? 
     if (!calledForReload) { 
      calledForReload = YES; 
      [webView reload]; 
     } else { 
      // other response 
      // decide what you wish to do if you get another about:blank 
     } 
    } 

return YES; 
} 

В основном я видел IOS 8.4.1 UIWebView вдруг называет about:blank как первый URL. Мое решение состояло в том, чтобы проверить на about:blank и попросить UIWebView перезагрузить только в первый раз.

Ответ не в SWIFT, но, надеюсь, логика решения легко переводится в ваш код.

1

Произошло это, когда Google Translate инициировал мой WKWebView, чтобы отобразить пустую страницу после выполнения обратного вызова. Вот iOS 10, быстрая версия того же самого, что и @dredful, который, кажется, скрывает проблему, которую я вижу:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 
    if "about" == navigationAction.request.url?.scheme { 
     decisionHandler(.cancel); 
     webView.reload() 
    } 
}