it-swarm.com.de

So laden Sie eine lokale HTML-Datei in UIWebView

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.

163
madcoderz

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.

266
user478681

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.

90
Neal Ehardt

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.

40
AJPatel

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];
}
9
Saran

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: -

enter image description here

App wird aufgrund einer nicht erfassten Ausnahme beendet

'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'

8
Durai Amuthan.H

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)
6
pableiros
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];
4
user1173142

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)
3
Vinod Joshi
[[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"];

Es kann spät sein, aber wenn die Datei aus pathForResourcenil ist, sollten Sie sie in das Build Phases > Copy Bundle Resources.

enter image description here

3
Atif Imran

Stellen Sie sicher, dass "html_files" ein Verzeichnis im Hauptpaket Ihrer App ist und nicht nur eine Gruppe in Xcode.

3
ppalancica

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)
3
iGo

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 _ {
        }
    }
2
Jonesie
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 _ {
    }
}
1
ingconti

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)
0
Thomas Jeans

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 !!