Dans les applications exécutées sous iOS 8 et les versions ultérieures, utilisez la classe WKWebView au lieu d'utiliser UIWebView.
Ainsi, j'ai remplacé mon bon vieux UIWebView
avec une nouvelle et brillante WKWebView
. Mais ce que je pensais être un exercice facile (il suffisait d'intervertir les classes et de remplacer les méthodes de délégation) s'est avéré être une véritable pagaille.
Le problème
Lorsque je charge une chaîne HTML en utilisant
loadHTMLString(String, baseURL: URL?)
la vue web charge et rend le pur HTML mais il ne charge pas les images ou les fichiers CSS référencés à l'intérieur de la balise htmlString
.
Cela arrive uniquement sur un appareil réel ¡!
Dans Simultor, toutes les ressources référencées sont chargées correctement.
Exemple
J'ai défini un simple htmlString
dans ma classe de contrôleur de vue :
let imageName = "image.png"
let libraryURL: URL // The default Library URL
var htmlString: String {
return "<html> ... <img src=\"\(imageName)\" /> ... </html>"
// "..." represents more valid HTML code incl. header and body tags
}
L'image est stockée dans le dossier Root Library et son URL est donc la suivante :
let imageURL = libraryURL.appendingPathComponent(imageName)
Maintenant, je charge le htmlString
dans la vue web :
webView.loadHTMLString(htmlString, baseURL: libraryURL)
et il ne charge pas l'image même si l'option baseURL
est correctement réglé.
Des idées pour une solution
-
Peut-être
WKWebView
a un problème avec la résolution des chemins relatifs, donc ma première idée était d'utiliser chemins absolus à l'intérieur de la chaîne HTML.
Ça ne marche pas. -
Deux réponses à un autre poste SO a suggéré que l'utilisation
loadFileURL(URL, allowingReadAccessTo: URL)
au lieu deloadHTMLString(...)
fonctionne dans iOS 9+.
Ça marche.
Cependant, je ne peux pas utiliser la solution 2 car mes fichiers HTML sont cryptés et les fichiers décryptés ne doivent pas être stockés sur le disque.
Question
Existe-t-il un moyen de charger des ressources locales telles que des images et des styles à l'aide de la fonction WKWebView
's
loadHTMLString(String, baseURL: URL?)
fonction ? Ou est-ce encore un bug dans iOS 9+ ?
(Je n'arrive pas à croire qu'Apple fournisse et recommande l'utilisation d'une vue web qui ne peut charger aucun contenu web local à partir d'une chaîne HTML).
0 votes
Essayez ça : stackoverflow.com/questions/31254725/
0 votes
Essayez ça : stackoverflow.com/questions/31254725/
0 votes
J'ai le même problème. J'ai essayé avec "loadFileURL(URL, allowingReadAccessTo : URL)". Cela ne fonctionne toujours pas pour moi. Les images ne se chargent toujours pas. Comment avez-vous réussi à le faire fonctionner ?
2 votes
Comment avez-vous réussi à le faire fonctionner ?
0 votes
Cela fait 3 ans et 8 mois plus tard et je suis toujours coincé avec le même problème.
0 votes
@Solomiya Eh bien, WKWebView est une sacrée chose...
0 votes
@Mischa alors, avez-vous réussi à résoudre définitivement ce problème ? Je vois qu'aucune réponse n'a été acceptée. Pourriez-vous partager l'approche qui vous a réellement aidé ?
0 votes
Honnêtement, je ne me souviens pas exactement. Je pense que nous avons trouvé une solution de contournement ou utilisé une approche complètement différente. Mais je pense que je n'ai jamais vraiment obtenu de réponse à la question de savoir pourquoi cela ne fonctionne pas. Sinon, j'aurais répondu à ma propre question ici...
0 votes
@Solomiya avez-vous trouvé une solution viable à ce problème ? Pouvez-vous m'aider à résoudre un problème similaire ? stackoverflow.com/questions/63800637/