Cómo cargar el archivo html local en UIWebView

Estoy intentando cargar un archivo html en mi UIWebView pero no funcionará. Aquí está la etapa: tengo una carpeta llamada html_files en mi proyecto. Luego creé un webView en el constructor de interfaces y le asigné una salida en viewController. Este es el código que estoy usando para anexar el archivo html:

-(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]; } 

Eso no funcionará y UIWebView está en blanco. Apreciaría algo de ayuda.

probablemente sea mejor utilizar NSString y cargar el documento html de la siguiente manera:

C objective

 NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"]; NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; [webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]]; 

Rápido

 let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html") let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding) webView.loadHTMLString(html!, baseURL: nil) 

Swift 3 tiene algunos cambios:

 let htmlFile = Bundle.main.path(forResource: "intro", ofType: "html") let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8) webView.loadHTMLString(html!, baseURL: nil) 

¿Has probado?

También verifique que el recurso fue encontrado por pathForResource:ofType:inDirectory call.

EDICIÓN 2016-05-27loadRequest expone “una vulnerabilidad universal de secuencias de comandos entre sitios”. Asegúrese de tener todos los activos que carga. Si carga un script incorrecto, puede cargar todo lo que quiera.

Si necesita enlaces relativos para trabajar localmente, use esto:

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"my" withExtension:@"html"]; [webView loadRequest:[NSURLRequest requestWithURL:url]]; 

El paquete buscará en todos los subdirectorios del proyecto para encontrar my.html . (la estructura del directorio se aplana en el momento de la comstackción)

Si my.html tiene la etiqueta , la vista web cargará https://stackoverflow.com/questions/7063276/how-to-load-local-html-file-into-uiwebview/some.png de su proyecto.

con esto puede cargar el archivo html que está en los activos de su proyecto (paquete) a webView.

  UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; [web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]]; 

puede ser que esto te sea útil.

Supongo que primero debe allocate e webview su vista webview ::

 - (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]; } 

Un fragmento de código simple de copiar y pegar:

 -(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu { [webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]]; } 

Nota:

Asegúrese de que la membresía de destino del archivo html esté marcada; de lo contrario, se lanzará una excepción: –

enter image description here

Aplicación de finalización debido a excepción no detectada

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

 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]]]; 

Para Swift 3 y 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) 

Puede ser que su archivo HTML no sea compatible con la encoding UTF-8, porque el mismo código me funciona.

O puede también esta línea de código:

 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]; 

Aquí la forma en que funciona el archivo HTML con 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]; 

Puede usar las solicitudes para llamar al archivo HTML en su UIWebview

Asegúrese de que “html_files” sea un directorio en el paquete principal de su aplicación, y no solo un grupo en Xcode.

Una nueva forma de hacer esto usando swift. UIWebView ya no existe y WKWebView es la nueva clase para cargar páginas web, lo que garantiza las funciones de Safari para la vista web.

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

Puede ser tarde, pero si el archivo de pathForResource es nil , debe agregarlo en las Build Phases > Copy Bundle Resources .

enter image description here

Aquí está 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 _ { } } 

En Swift 2.0, la respuesta de @user478681 podría verse así:

  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) 

Coloque todos los archivos (html y recursos) en un directorio (para mi “manual”). A continuación, arrastre y suelte el directorio a XCode, sobre “Archivos de soporte”. Debería verificar las opciones “Copiar elementos si es necesario” y “Crear referencias de carpeta”. Luego, escribe un código simple:

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"]; [myWebView loadRequest:[NSURLRequest requestWithURL:url]]; 

Atención a @"manual/index" , manual es el nombre de mi directorio !! ¡Es todo! Perdón por mi mal ingles…

=============================================== =====================

Hola desde Costa Rica. Ponga los archivos (html y demás recursos) en un directorio (en mi caso lo llamé manual), luego, arrastre y suelte en XCode, sobre “Archivos de soporte”. Deberá seleccionar las opciones “Copiar elementos si es necesario” y “Crear referencias de carpeta”.

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