Ich versuche, eine HTML-Datei in mein UIWebView zu laden, aber das funktioniert nicht. Hier ist die Bühne: Ich habe einen Ordner namens html_files in meinem Projekt. Dann habe ich im Interface Builder ein WebView erstellt und ihm im viewController einen Ausgang zugewiesen. Dies ist der Code, mit dem ich die HTML-Datei anhänge:
-(void)viewDidLoad
{
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
[super viewDidLoad];
}
Das geht nicht und die UIWebView ist leer. Ich würde mich über Hilfe freuen.
wahrscheinlich ist es besser, NSString zu verwenden und das HTML-Dokument wie folgt zu laden:
Ziel-C
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]];
Swift
let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding)
webView.loadHTMLString(html!, baseURL: nil)
Swift 3 hat einige Änderungen:
let htmlFile = Bundle.main.path(forResource: "intro", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
webView.loadHTMLString(html!, baseURL: nil)
Hast du versucht?
Überprüfen Sie auch, ob die Ressource durch einen pathForResource:ofType:inDirectory
- Aufruf gefunden wurde.
EDIT 2016-05-27 - loadRequest
macht "eine universelle Cross-Site Scripting-Sicherheitsanfälligkeit" verfügbar. Make Stellen Sie sicher, dass Sie jeden einzelnen Inhalt besitzen, den Sie laden. Wenn Sie ein fehlerhaftes Skript laden, kann es alles laden, was es will.
Wenn Sie relative Links benötigen, um lokal zu arbeiten, verwenden Sie Folgendes:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"my" withExtension:@"html"];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
Das Bundle durchsucht alle Unterverzeichnisse des Projekts nach my.html
. (Die Verzeichnisstruktur wird zur Erstellungszeit abgeflacht.)
Wenn my.html
hat den Tag <img src="some.png">
, das webView lädt some.png
aus Ihrem Projekt.
auf diese Weise können Sie HTML-Dateien, die sich in Ihrem Projekt befinden, in webView laden.
UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];
vielleicht ist das nützlich für Sie.
Ich nehme an, Sie müssen allocate
und zuerst webview
initialisieren:
- (void)viewDidLoad
{
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
webView = [[UIWebView alloc] init];
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
[super viewDidLoad];
}
Ein einfaches Code-Snippet zum Kopieren und Einfügen:
-(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu
{
[webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]];
}
Anmerkung:
Stellen Sie sicher, dass die Zielmitgliedschaft der HTML-Datei markiert ist, da sonst die folgende Ausnahme ausgelöst wird: -
App wird aufgrund einer nicht erfassten Ausnahme beendet
'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
Für Swift 3 und Swift 4:
let htmlFile = Bundle.main.path(forResource: "name_resource", ofType: "html")
let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
self.webView.loadHTMLString(html, baseURL: nil)
UIWebView *web=[[UIWebView alloc]initWithFrame:self.view.frame];
//[self.view addSubview:web];
NSString *filePath=[[NSBundle mainBundle]pathForResource:@"browser_demo" ofType:@"html" inDirectory:nil];
[web loadRequest:[NSURLRequest requestWhttp://stackoverflow.com/review/first-postsithURL:[NSURL fileURLWithPath:filePath]]];
Möglicherweise unterstützt Ihre HTML-Datei die UTF-8-Codierung nicht, da derselbe Code für mich funktioniert.
Oder du kannst auch diese Codezeile:
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"Notes For Apple" ofType:@"htm" inDirectory:nil];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[WebView loadHTMLString:htmlString baseURL:nil];
Hier die Arbeitsweise der HTML-Datei mit Jquery.
_webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)];
[self.view addSubview:_webview];
NSString *filePath=[[NSBundle mainBundle]pathForResource:@"jquery" ofType:@"html" inDirectory:nil];
NSLog(@"%@",filePath);
NSString *htmlstring=[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[_webview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
or
[_webview loadHTMLString:htmlstring baseURL:nil];
Sie können entweder die Anforderungen verwenden, um die HTML-Datei in Ihrer UIWebview aufzurufen
Swift iOS:
// get server url from the plist directory
var htmlFile = NSBundle.mainBundle().pathForResource("animation_bg", ofType: "html")!
var htmlString = NSString(contentsOfFile: htmlFile, encoding: NSUTF8StringEncoding, error: nil)
self.webView.loadHTMLString(htmlString, baseURL: nil)
Stellen Sie sicher, dass "html_files" ein Verzeichnis im Hauptpaket Ihrer App ist und nicht nur eine Gruppe in Xcode.
Ein neuer Weg, dies mit Swift zu tun. Das UIWebView ist nicht mehr und WKWebView ist die neue Klasse zum Laden von Webseiten, die sicherstellt, dass die Safari-Funktionen in der Webansicht angezeigt werden.
import WebKit
let preferences = WKPreferences()
preferences.javaScriptCanOpenWindowsAutomatically = false
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
let request = NSURLRequest(URL: NSURL(string: "http://nshipster.com"))
webView.loadRequest(request)
Hier ist Swift 3:
if let htmlFile = Bundle.main.path(forResource: "aa", ofType: "html"){
do{
let htmlString = try NSString(contentsOfFile: htmlFile, encoding:String.Encoding.utf8.rawValue )
messageWebView.loadHTMLString(htmlString as String, baseURL: nil)
}
catch _ {
}
}
if let htmlFile = NSBundle.mainBundle().pathForResource("aa", ofType: "html"){
do{
let htmlString = try NSString(contentsOfFile: htmlFile, encoding:NSUTF8StringEncoding )
webView.loadHTMLString(htmlString as String, baseURL: nil)
}
catch _ {
}
}
In Swift 2.0 könnte die Antwort von @ user478681 so aussehen:
let HTMLDocumentPath = NSBundle.mainBundle().pathForResource("index", ofType: "html")
let HTMLString: NSString?
do {
HTMLString = try NSString(contentsOfFile: HTMLDocumentPath!, encoding: NSUTF8StringEncoding)
} catch {
HTMLString = nil
}
myWebView.loadHTMLString(HTMLString as! String, baseURL: nil)
Legen Sie alle Dateien (HTML und Ressourcen) in ein Verzeichnis (für mein "Handbuch"). Ziehen Sie als Nächstes das Verzeichnis über "Unterstützende Dateien" zu XCode und legen Sie es dort ab. Sie sollten die Optionen "Elemente bei Bedarf kopieren" und "Ordnerreferenzen erstellen" aktivieren. Als nächstes schreiben Sie einen einfachen Code:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Aufmerksamkeit auf @"manual/index"
, manual ist der Name meines Verzeichnisses !! Es ist alles !!!! Entschuldigung für mein schlechtes Englisch...
================================================ ====================
Hola desde Costa Rica. Sie können das Archiv (html und demás recursos) und den Regisseur (en mi caso lo llamé manual), die Sprache, den Kontrast und den Code in "Supporting Files" (Unterstützende Dateien) herunterladen. Usted debe seleccionar las opciones "Elemente bei Bedarf kopieren" y "Ordnerreferenzen erstellen".
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Presta atención a @"manual/index"
, manual es el nombre de mi directorio !!