WKWebView nicht laden von Ressourcen aus dem lokalen Dokument-Ordner
In meine Swift-iOS-app, die ich herunterladen möchten einige dynamische HTML-Seiten von einem remote-server, speichern Sie Sie in das Verzeichnis Dokumente, und zeigen Sie die Seiten von Dokument-Verzeichnis.
Ich war mit diesem, die Seite zu laden:
var appWebView:WKWebView?
...
appWebView!.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: htmlPath)))
Alles funktioniert auf dem simulator, aber wenn ich wechselte zu real-Handys, es zeigte einfach eine leere Seite. Ich habe dann mit der app verbunden, die mit Safari, und fand es klagte mit "Failed to load resource".
Dann habe ich versucht, Lesen Sie zunächst den Inhalt der Seite an htmlPath
dann verwenden Sie
appWebView!.loadHTMLString()
die Seite zu laden. Es funktioniert nur, wenn die HTML-Seite ist einfach. Aber wenn der HTML-Referenzen etwas anderes, etwa eine JavaScript-Datei auch in das Dokumenten-Verzeichnis (mit einem absoluten Pfad wie <script src="file:////var/mobile/Containers/Data/Application/762035C9-2BF2-4CDD-B5B1-574A0E2B0728/Documents/xxxxx.js">
), wird es nicht geladen.
Weiß jemand, warum dies geschieht, und wie das Problem zu beheben?
Mehr info:
- XCode-version: 7.3.1
- Bereitstellung Ziel: 8.1 (ich habe versucht, auf 9.3 zu, aber das hat nicht geholfen.)
InformationsquelleAutor der Frage Peter | 2016-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine vereinfachte version von dem, was ich zum laden von lokalen Dateien in ein Projekt von mir (iOS 10, Swift-3). Ich habe gerade aktualisiert mein code (7.5.2017) nach dem Test wieder auf iOS 10.3.1 und das iPhone 7+ auf Anfrage von Raghuram und Fox5150 in die Kommentare.
Ich gerade erstellt ein komplett neues Projekt und das ist die Ordner Struktur:
Update 19.04.2018: neue Funktion Hinzugefügt, um den download ein .zip mit HTML -, CSS -, JS-Dateien, entpacken Sie es in /Dokumente/(Alamofire + Zip) und laden Sie dann diese Dateien in das webView. Sie können es finden in der GitHub-Beispiel-Projekt als gut. Nochmals, fühlen Sie sich frei, um Gabel & Sterne! 🙂
Update 08.02.2018: schließlich Hinzugefügt ein GitHub-Beispiel-Projektdie auch eine lokale JavaScript-Datei. Fühlen Sie sich frei, um Gabel & Sterne! 🙂
Version 1 mit webView.loadFileURL()
ViewController.swift
Version 2 mit webView.loadHTMLString()
ViewController.swift
Fallstricke zu achten ist:
css/styles.css
weil iOS wird glätten Ihre Datei-Struktur und-Stile.css wird auf der gleichen Ebene wie index.html so schreiben<link type="text/css" href="styles.css">
stattAngesichts der 2 Versionen und die Punkte hier sind meine html/css Dateien aus dem Projekt:
web/index.html
web/css/styles.css
Wenn jemand will, einen GitHub-Beispiel-Projekt, sagen Sie mir, in den Kommentaren und ich werde es hochladen.
InformationsquelleAutor der Antwort tech4242
Swift 4-Methode
Diese Methode ermöglicht die WKWebView richtig zu Lesen, Ihre Hierarchie von Verzeichnissen und Unterverzeichnissen für die verknüpften CSS - /JS-Dateien. Sie NICHT brauchen, um Ihre HTML -, CSS-oder JS-code.
Aktualisiert Xcode 9.3
Schritt 1
Importieren den Ordner mit den lokalen web-Dateien in Ihr Projekt. Stellen Sie sicher, dass Sie:
Schritt 2
Gehen Sie auf den View-Controller mit dem WKWebView und fügen Sie den folgenden code, um die
viewDidLoad
Methode:index
– der name der Datei zu laden (ohne den.html
Erweiterung)website
– den Namen der web-Ordner (index.html
sollte an der Wurzel dieses Verzeichnisses)Abschluss
Der gesamte code sollte wie folgt Aussehen:
Wenn jemand von Euch weitere Fragen zu dieser Methode oder den code, ich werde mein bestes tun Sie zu beantworten. 🙂
InformationsquelleAutor der Antwort Matt Swift
Diese Lösung hat mir geholfen:
InformationsquelleAutor der Antwort Christian Anchor Dampf
Dies funktioniert gut (Swift 3, Xcode 8):
InformationsquelleAutor der Antwort hkdalex