Quelle est la différence entre UIWebView et WKWebView lors du chargement de ressources locales
Je veux charger les ressources locales avec webView. J'ai construit une démo avec les deux UIWebView et WKWebView pour faire quelques essais avec le code ci-dessous.
let uiWebView = UIWebView(frame: self.view.bounds)
self.view.addSubview(uiWebView)
let wkWebView = WKWebView(frame:CGRect(x: 0, y: 400, width: 500, height: 500))
self.view.addSubview(wkWebView)
let path = Bundle.main.path(forResource:"1", ofType: "png")
guard let realPath = path else {
return
}
let url = URL(string: realPath)
let fileUrl = URL(fileURLWithPath: realPath)
if let realUrl = url {
uiWebView.loadRequest(URLRequest(url:realUrl))
wkWebView.load(URLRequest(url:realUrl))
}
//uiWebView.loadRequest(URLRequest(url:fileUrl))
//wkWebView.load(URLRequest(url:fileUrl))
La uiWebView pouvez charger la ressource mais wkWebView ne peut pas. Mais si j'utilise
uiWebView.loadRequest(URLRequest(url:fileUrl))
wkWebView.load(URLRequest(url:fileUrl))
les deux uiWebView et wkWebView peut bien fonctionner.
Je suis confus et peut-on expliquer que pour moi:
Ne devrais-je pas utiliser les URL(string: realPath) pour une ressource locale? Mais pourquoi UIWebView peut l'utiliser ?
source d'informationauteur Rufus
Vous devez vous connecter pour publier un commentaire.
Un couple de points:
WKWebview
pour iOS 8 et les versions ultérieures. Je voudrais éviter d'écrire du nouveau code avecUIWebView
./path/to/file.png
et l'utilisationfile:///path/to/file.png
à la place.Pourquoi une URL qui fonctionne et l'autre pas, nous allons faire un exemple minimal:
url
ne pas fournir le schéma (un.k.un protocole). Il ne doit être utilisé en conjonction avec une autre URL pour donner l'adresse absolue de la ressource que vous essayez d'atteindre.UIWebView
prend en charge en arrière pour des raisons de compatibilité, mais Apple a décidé de commencer à nettoyer avecWKWebView
.fileURL
a un dispositif (file://
) qui indique que la ressource est situé sur le système de fichiers local. D'autres mécanismes communs sonthttp
https
ftp
etc. C'est une adresse complète d'une ressource, de sorte que les deux points de vue sais comment le résoudre.Cela peut être pour des raisons de sécurité, ou tout simplement comment la
WKWebView
API a été mise en œuvre.WKWebView
a une instance spécifique méthode de chargement des ressources locales appeléloadFileURL(_:allowingReadAccessTo:)
. Cela a été introduit dans iOS 9.Note
Si vous utilisez iOS 8.0 ou version plus récente, vous devriez être en utilisant
WKWebView
au lieu deUIWebView
. Voir: https://developer.apple.com/reference/webkit/wkwebview