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:
Console de débogage Safari pour le simulateur:
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.
La capture d'écran suivante provient de system.log et montre des erreurs avec webkit.
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.
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:
Si vous créez une application pour Mac, veillez à activer App Sandbox
ON dans votre cible et cochez Networks
Connexions sortantes.
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/>
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
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