Pregunta

Tengo un webview en mi aplicación para iPhone, y también tengo algunos archivos html dentro de mi carpeta de Recursos.Cuando mi aplicación carga, me carga en una página de mis recursos en mi webview.Pero , necesito hacer enlaces dentro de mi webview que señalan algunos otros recursos (Por ejemplo, imágenes, u otros archivos html).Sólo haciendo un pariente enlace no funciona:

<a href="OtherPage.html">Doesn't work</a>
¿Fue útil?

Solución

Cuando carga esos recursos, debe establecer la URL base. Puede hacerlo utilizando el método:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

... donde baseURL sería la URL del archivo de su carpeta de recursos.

Otros consejos

Al parecer hay un poco de un problema de acuerdo a la iPhone SDK Notas de la Versión para el iPhone OS 3.0:

Tema: UIWebView no se puede cargar recursos locales en las aplicaciones creadas en contra de 3.0.

Cuando se utiliza [UIWebView loadHTMLString:baseURL:], el HTML la cadena no debe referirse a local los recursos con los file:// esquema.En su lugar, pasar en NULL o un file:// URL para baseURL:, o incluir la recursos directamente en el HTML con <style> y <script> las etiquetas.

Justo lo suficiente.Pero que pasa en un estándar de emisión- file:// URL para baseURL no a todo el trabajo.Sin embargo ...resulta que, si cambia / a // y espacios para %20, usted estará preparado!(El uso de %20 hace un montón de sentido, pero la barra doble parte me cogió por sorpresa.)

Digamos que usted ya tiene NSString *markup configurar.Aquí está todo lo que debe hacer.(He envuelto el código aquí para mejorar la legibilidad.Usted puede desear para refactorizar/ajustar al gusto.)

 NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
     stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
     stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
 [webView loadHTMLString:markup baseURL:[NSURL URLWithString:
     [NSString stringWithFormat:@"file:/%@//", resourcePath]]];

Tan largo como tu CSS, JavaScript y las imágenes son mencionados por su nombre solo, este debe hacer el truco en el iPhone OS 3.0, en la que loadHTMLString:baseURL: preocupa!

Lo arreglé: lo usé para BaseURL como dijo August:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];

¡Gracias!

Este código devolvería una cadena con la URL de un archivo llamado " OtherPage.html " en el directorio de recursos de su paquete.

[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]

Esto funcionó para mí. Mis archivos HTML estaban en subcarpetas (no grupos) en mi proyecto. Mi página html se llama page01 y la subcarpeta es html:

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];

NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]    
                             pathForResource:@"page01" ofType:@"html"                                                               
                             inDirectory:@"html"] 
                         encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];

Intente cargar OtherPage.html primero. Si no puede, entonces no está allí, y se ha perdido parte de agregarlo al proyecto. Si puede, entonces puede haber un error tipográfico en el enlace, o la baseURL podría ser incorrecta, como se indicó en agosto. Cuando creé un archivo html con imágenes que estaban en el archivo de recursos, funcionó bien simplemente usando

<img src="file.png">

Mira cómo Phonegap lo hace. Aquí está su tutorial sobre recursos locales en el iPhone . El paso 11 podría ser lo que estás descuidando.

Quizás tenga algo que ver con el baseurl: cuando cargo los recursos, uso esta línea:

[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

ver al final, dice baseURL: " " ;. Si elimino esto, no funciona (se bloquea), pero no conozco el camino hacia mis recursos. Si alguien lo hace .....?

Para mí, el problema era que los archivos js no estaban incluidos en el paquete. Asegúrese de verificar eso.

OK, aquí 3.5 años después :) ... probé exactamente la sugerencia de Michael Gaylord anterior, pero no funcionó en sims para 5.0, 5.1, 6.0, 6.1, ni en dispositivos reales que funcionan igual. Sin embargo, esta aclaración SO sobre dónde se agrupan los recursos ( Dónde ¿la salida de compilación va? ) me ayudó a que funcione así:

  1. crear una carpeta Finder en el proyecto (como sugiere Michael, y yo tampoco probé 'grupo')
  2. ponga su html en esa carpeta usando Finder
  3. en Xcode usa archivo - > agregar archivos al proyecto
  4. Asegúrese de que el proyecto reconoce que debe estar en el paquete:

    1. Haga clic derecho en el objetivo principal del proyecto en la ventana Navigator ,
    2. asegúrese de que TARGETS esté seleccionado, la pestaña Fases de construcción ,
    3. Haga clic en el triángulo Copiar recursos de paquete thingy | >
    4. Y - esto es lo que es diferente del de Michael : ya debería mostrar su archivo html Y la ruta. (Tal vez los XCoders hayan mejorado la adición de archivos AI :)

Entonces, todo lo que tenía que hacer era copiar: pegar el código de Michael sobre textualmente y cambiar esta línea:

                     inDirectory:@"html"] 

a:

                     inDirectory:nil]

y Shaazam ! funcionó :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top