style pwa icon home capable bar apps apple app iphone html resources hyperlink webview

pwa - Enlace a recursos dentro de WebView-iPhone



web app ipad (10)

Tengo una vista web en mi aplicación de iPhone, y también tengo algunos archivos html dentro de mi carpeta de Recursos. Cuando se carga mi aplicación, cargo una página de mis recursos en mi vista web. Pero, necesito hacer enlaces dentro de mi vista web que apunten a otros recursos (por ejemplo, imágenes u otros archivos html). Solo hacer un enlace relativo no funciona:

<a href="OtherPage.html">Doesn''t work</a>


Cuando carga esos recursos, necesita establecer la URL base. Puedes hacer esto usando el método:

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

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



Este código devolverá 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]


Intenta cargar OtherPage.html primero. Si no puede, entonces no está allí, y se ha perdido parte de agregarlo al proyecto. Si puede, puede que haya un error tipográfico en el enlace o que el URL base podría ser incorrecto, según lo declarado por August. Cuando creé un archivo html con imágenes que estaban en el archivo de recursos, funcionó bien simplemente usando

<img src="file.png">


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

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

¡Gracias!


Tal vez tiene 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 tomo esto, no funciona (se bloquea), pero no conozco el camino a mis recursos. Si alguien lo hace .....?


Esto funcionó para mí. Mis archivos HTML estaban en subcarpetas (no grupos) en mi proyecto. Mi página html se llama página01 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];


Aparentemente hay un poco de acuerdo con las Notas de lanzamiento de iPhone SDK para iPhone OS 3.0 :

Problema: UIWebView no puede cargar recursos locales en aplicaciones creadas en 3.0.

Al usar [UIWebView loadHTMLString:baseURL:] , la cadena HTML no debe hacer referencia a los recursos locales con el esquema file:// . En su lugar, baseURL: NULL o un file:// URL para baseURL: o incluya los recursos directamente en el HTML con las etiquetas <style> y <script> .

Lo suficientemente justo. Pero pasar un file:// edición file:// URL para baseURL no funciona del todo. Sin embargo ... resulta que, si cambia / a // y espacios a %20 , ¡se establecerá! (Usar %20 tiene mucho sentido, pero la parte de doble barra me tomó por sorpresa).

Digamos que ya tiene NSString *markup . Aquí está todo lo que haces. (He incluido el código aquí para facilitar la lectura. Es posible que desee refactorizar / ajustar al gusto).

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

Mientras su CSS, JavaScript e imágenes se loadHTMLString:baseURL: solo por nombre de archivo, esto debería ser el truco en iPhone OS 3.0 donde loadHTMLString:baseURL: se refiere!


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


OK, aquí 3.5 años después :) ... probé la sugerencia de Michael Gaylord arriba exactamente, pero no funcionó en sims para 5.0, 5.1, 6.0, 6.1, ni en dispositivos reales con el mismo funcionamiento. Sin embargo, esta aclaración de SO sobre dónde se agrupan los recursos ( ¿Adónde va la producción de compilación? ) Me ayudó a hacer que funcionase para mí de esta manera:

  1. crear una carpeta Finder en el proyecto (como sugiere Michael, y yo tampoco probé "grupo")
  2. pon tu html en esa carpeta usando Finder
  3. en Xcode usa el archivo -> agrega archivos al proyecto
  4. Asegúrese de que el proyecto reconozca que debe estar en el paquete de la siguiente manera:

    1. Haga clic derecho en el objetivo principal del proyecto en la ventana de Navigator ,
    2. asegúrese de que TARGETS esté seleccionado, la pestaña Build Fhases ,
    3. Haga clic en Copiar recursos de paquete triángulo cosita |>
    4. Y - aquí está lo que es diferente de Michael - Ya debería mostrar su archivo html Y la ruta. (Tal vez los XCoders han mejorado los archivos de agregar AI :)

Así que todo lo que tuve que hacer fue copiar y pegar el código de Michael arriba del verbatum y cambiar esta única línea:

inDirectory:@"html"]

a:

inDirectory:nil]

y Shaazam ! funcionó :)