Ich habe eine sehr einfache iOS-App mit einer uiwebview, die eine sehr einfache Testseite (test.html) lädt:
<html>
<body>
<img src="img/myimage.png" />
</body>
</html>
Ich lade diese test.html-Datei in meine Webansicht:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseUrl];
Dies funktioniert einwandfrei, wenn ich auf das Bild ohne den relativen Pfad verweise und das referenzierte Bild in den Stammpfad unter Ziele -> Bundle-Ressourcen in XCode kopiere. Es kann jedoch nicht mit dem relativen Pfad funktionieren, wie in meiner HTML-Datei gezeigt . Es muss eine Möglichkeit geben, dies zu tun. Ich habe viele Bilder, CSS und Javascript-Dateien, die ich in die Webansicht laden möchte, und ich möchte nicht alles im Stammverzeichnis haben und alle Referenzen in meinem Web ändern müssen App.
@"www/app"
für das Verzeichnis arg zu übergeben?In Swift:
quelle
requestURL
allerdings auspacken .Ich habe alles in einer Zeile zusammengefasst (schlecht, ich weiß) und hatte keine Probleme damit:
quelle
Ich mache einfach das:
Wobei "index.html" relativ auf Bilder, CSS, Javascript usw. verweist.
quelle
Schnelle Antwort 2.
Die UIWebView-Klassenreferenz rät von der Verwendung von webView.loadRequest (Anfrage) ab:
In dieser Lösung wird der HTML-Code in eine Zeichenfolge eingelesen. Die HTML-URL wird verwendet, um den Pfad zu ermitteln, und übergibt diese als Basis-URL.
quelle
Ich bin zurückgegangen und habe dies getestet und erneut getestet. Es scheint, dass der einzige Weg, wie ich es zum Laufen bringen kann (da ich einige Dateien im img-Ordner und einige in js / css usw. habe), nicht darin besteht, dies zu tun Verwenden Sie einen relativen Pfad zu meinem Bild im HTML-Code und lassen Sie alles auf den Bundle-Ordner verweisen. Schade :(.
quelle
@ sdbrains Antwort in Swift 3:
quelle
In Swift 3.01 mit WKWebView:
Dadurch werden einige der feineren Syntaxänderungen in 3.01 berücksichtigt und die Verzeichnisstruktur beibehalten, sodass Sie verwandte HTML-Dateien einbetten können.
quelle
let localURL = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "mapa_procesos")!) webView.loadRequest(URLRequest(url: localURL))