2011-07-26 16 views
10

Tengo un código para hacer que esto funcione en iOS. Usando lo que sea que encontré aquí y alrededor de la Web logré llegar a algún lado haciendo la versión Cocoa Mac Os, pero las imágenes no se cargan. CSS y Javascript tampoco parecen cargarse. El directorio para el HTML se está agregando al grupo de Recursos pero se está agregando como Referencias de carpeta (carpeta azul) lo que hace que Xcode respete la estructura del directorio de la Aplicación HTML.Cómo cargar archivos locales html con imágenes, js y css en WebView Cocoa/Mac OS

Aquí está el código que estoy tratando de usar:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" 
                ofType:@"html" 
               inDirectory:@"/Patient_eMMR_HTML5" ]; 
NSString *html = [NSString stringWithContentsOfFile:htmlPath 
              encoding:NSUTF8StringEncoding 
               error:nil]; 

[[webView mainFrame] loadHTMLString:html baseURL:[NSURL fileURLWithPath: 
                [NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/", 
                [[NSBundle mainBundle] bundlePath]]]]; 

Ésta es la versión de IOS de código de la que me he basado en el código que utilizo arriba:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" 
                ofType:@"html" 
               inDirectory:@"/Patient_eMMR_HTML5" ]; 

NSString *html = [NSString stringWithContentsOfFile:htmlPath 
              encoding:NSUTF8StringEncoding 
               error:nil]; 

[webView loadHTMLString:html 
       baseURL:[NSURL fileURLWithPath: 
         [NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/", 
          [[NSBundle mainBundle] bundlePath]]]]; 

Cualquier ayuda es enormemente apreciado. Gracias.

Respuesta

14

No hay necesidad de perder el tiempo con la URL base si se carga el código HTML a través de un NSURLRequest en lugar de como una cadena:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index" 
                ofType:@"html" 
               inDirectory:@"Patient_eMMR_HTML5"]; 
NSURL* fileURL = [NSURL fileURLWithPath:filePath]; 
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL]; 
[[webView mainFrame] loadRequest:request]; 

en cuenta que debe especificar el nombre del directorio sólo en el método ‑pathForResource:…, don' t prefijo con una barra inclinada. Se supone que el directorio nombrado está rooteado en el directorio del paquete principal.

Tenga en cuenta que UIWebView también tiene un método ‑loadRequest:, por lo que podría utilizar casi el mismo código en IOS.

+0

Muchas gracias Rob, funcionó. Todavía tengo un problema donde Canvas no está dibujando. No voy a utilizar este enfoque en este punto porque no podemos volver a probar todo, así que ahora estoy haciendo un enlace tonto que abre Safari, pero quería aprender esto. Gracias de nuevo. – HotFudgeSunday

+0

En lo que respecta a Canvas, ¿está seguro de que JavaScript está habilitado para WebView? –

+0

Bueno, no he habilitado nada ni deshabilitado nada. El código es exactamente lo que me diste allí. Aún así, muchas cosas que se están disparando a través de Javascript funcionan. Es solo Canvas que parece fallar. Incluso tengo algunas animaciones CSS que se crean programáticamente y están funcionando. Haré una búsqueda para esto. – HotFudgeSunday

1

mserin, esta pregunta fue dirigida al Cocoa Framework para Mac Os X. Está utilizando un UIWebView que es parte de UIKit para Cocoa Touch. Si usted está tratando de construir esto para iPhone/iPad que should look at this post.

Si usted está tratando de hacer esto fon Mac utilizar el código que estamos utilizando aquí, pero es necesario incluir el marco WebKit como esto:

#import <WebKit/WebKit.h> 

Y luego subclase WebView, no UIWebView:

WebView *webView; 

Con una propiedad como esta:

@property (nonatomic, retain) IBOutlet WebView *webView; 
3

Esto funcionó para mí con resourceURL en Mac OS X

[webView loadHTMLString:htmlContent baseURL:[[NSBundle mainBundle] resourceURL]] 
+0

¡Justo lo que necesitaba, gracias! Aquí está en Swift 4: 'webView.mainFrame.loadHTMLString (html, baseURL: Bundle.main.resourceURL!)' –

Cuestiones relacionadas