Je suis en train d'implémenter wkwebview dans une application qui utilisait UIWebView. Je ne parviens pas à faire exécuter le javascript lorsqu'on pointe vers un fichier html local qui contient le javascript. Le javascript est dépouillé pour faire une simple alerte et charger une carte google basique. Rien de tout cela n'est exécuté. Dois-je utiliser un serveur local ? GCDWebserver
Je dois ajouter que le html/javascript fonctionne dans safari, le navigateur google sans problème.
Les solutions proposées comprennent 1. AppTransportSecuritySettings AllowArbitrary loads. 2. ViewController.swift webview.configuration.preferences.javaScriptEnabled = true 3. Cette question aborde le problème et indique qu'il a été corrigé dans iOS 10.3. Charger des fichiers Javascript à travers un fichier HTML sur WKWebView dans iOS Le simulateur fonctionne sous la version 12.1 4. Cette question aborde également le problème de la nécessité pour GCDWebserver d'être capable d'exécuter du javascript à l'aide de wkwebview. WKWebView n'exécute pas de code js Ce problème a toutefois été résolu dans une version plus récente d'iOS. Voici un peu de code :
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
//@IBOutlet var googleMap: WKWebView!
var webview: WKWebView!
override func loadView() {
webview = WKWebView()
webview.navigationDelegate = self
view = webview
}
override func viewDidLoad() {
super.viewDidLoad()
//let url = URL(string: "https://schallerf1.com")!
let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "www")!
webview.load(URLRequest(url: url))
webview.allowsBackForwardNavigationGestures = true
let request = URLRequest(url: url)
webview.configuration.preferences.javaScriptEnabled = true
webview.load(request)
}
}
<!DOCTYPE html>
<html>
<head>
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<b>WHYYYYYYYYYY!!!!</b>
<div style="height:100%;width:100%;" id="map"></div>
<script type="text/javascript">
var name = "TESTTESTTEST";
alert('code: ' + name + '\n');
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 39.976068, lng: -83.003297},
zoom: 8
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=xxxxxxxxxxxxxxxxxx&callback=initMap"></script>
</body>
</html>
Aucun javascript ne fonctionne, je devrais recevoir une alerte et une simple carte Google devrait s'afficher. Dois-je me pencher sur le serveur web local GCDWebserver ?