web-dev-qa-db-fra.com

WKWebView ne charge pas la page Web - affiche un écran vide dans Swift

Ce code est censé charger la page d'accueil Apple, mais affiche plutôt un écran vide.
Cela se produit avec les URL HTTP et HTTPS.

Code: 

import UIKit
import WebKit

class WebViewController: UIViewController, WKUIDelegate{

    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView

    }
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .red

        let myURL = URL(string: "https://www.Apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}

J'ai essayé de modifier les "Paramètres de sécurité de Transport d'applications" pour permettre un chargement arbitraire. N'a rien changé.

Captures d'écran:

Afficher la hiérarchie:

 Captured view hierarchy Screenshot

Console de débogage Safari pour le simulateur:

 Safari debug console Screenshot

 enter image description here

5

J'ai trouvé la solution. Le problème était dû au bouclier Web de AVG AntiVirus. Pour une raison quelconque, AVG webshield traite toutes les communications réseau à partir du simulateur comme frauduleuses. La capture d'écran suivante montre l'application Safari en cours d'exécution sur un simulateur. Il est dit que www.Apple.com n'est pas sûr ou que tout autre site web. 

 Safari screenshot

La capture d'écran suivante provient de system.log et montre des erreurs avec webkit. 

 System log

Vous pouvez répliquer ce problème en installant l'antivirus AVG et en activant le bouclier Web. WKWebview dans votre application (sur le simulateur) ne chargerait rien. 

Je ne comprends pas pourquoi cela ne fonctionne pas sur un appareil réel. Cela aurait pu être un autre problème avec l'appareil. J'ai également supprimé le dossier de données dérivé, l'application réelle et redémarré l'appareil. 

Merci à tous pour vos réponses et votre aide. 

5

Le code suivant fonctionne parfaitement pour moi dans Xcode 9.3:

import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
        self.view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.load(URLRequest(url: URL(string: "https://www.Apple.com")!))
    }

}

Voici le résultat:

 WKWebView in iOS Simulator.

3
Sam Fischer

Construire une application pour Mac?

Si vous créez une application pour Mac, veillez à activer App Sandbox ON dans votre cible et cochez Networks Connexions sortantes.

enter image description here


Mise à jour: Si vous préférez le long chemin, ajoutez ce qui suit à YourAppName.entitlements

<key>com.Apple.security.app-sandbox</key>
<true/>
<key>com.Apple.security.network.client</key>
<true/>
1
Mick
Your code is working fine
//
//  ViewController.Swift
//  StackOverflow
//
//  Created by Vivek Kumar on 5/11/18.
//  Copyright © 2018 Vivek. All rights reserved.
//

import UIKit
import WebKit
class ViewController: UIViewController ,WKUIDelegate{

    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .red
        let myURL = URL(string: "https://www.Apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }

}
[![Simulator screenshot by running your code][1]][1]


  [1]: https://i.stack.imgur.com/dxx0X.png
0
Vivek Singh

Vous pouvez essayer ci-dessous le code

import UIKit
import WebKit

class WebViewController: UIViewController {

var wkWebview: WKWebView!

 override func viewDidLoad() {

   super.viewDidLoad()

    var Ycord : CGFloat = 0.0 // for top space 
    if UIScreen.main.bounds.height == 812 { //Check for iPhone-x
        Ycord = 44.0
    }
    else {
        Ycord = 20.0
    }

    let frame = CGRect(x: 0.0, y: Ycord, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-Ycord)

    self.wkWebview = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
    self.wkWebview.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.wkWebview.uiDelegate = self
    self.view.addSubview(self.wkWebview)

    DispatchQueue.main.async {

        self.wkWebview.load(URLRequest(url:URL(string: "https://www.Apple.com")!))
    }        
 }
}

Sortie

 enter image description here

0
Rohit Makwana