2009-08-04 9 views
10

Estoy trabajando en una aplicación nativa de iPhone. Soy capaz de cargar un archivo local de index.htmlen un UIWebView:Enviar parámetros a un archivo local en un UIWebView

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]]; 

La web de cargas bien. Ahora, me gustaría cargar la web con algunos parámetros, de la misma manera uno tipos en el navegador: URL var1 = myValue & var2 = myValue2

para que pueda obtener esos valores dentro del Javascript del html? archivo. ¿Hay alguna forma de enviar parámetros a un archivo html local?

Gracias!

Respuesta

2

No, desafortunadamente no.

Puede, sin embargo, evitar esto mediante la definición de variables y llamar a funciones/métodos en JavaScript utilizando la UIWebView:stringByEvaluatingJavaScriptFromString:

+0

Tengo una función de JavaScript definida en el archivo HTML local. Puedo cargar ese archivo, pero, ¿cómo podría llamar a una función de JavaScript dentro de ese archivo? Necesito un ejemplo. – Hectoret

+0

[webView stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat: @ "myJavascriptFunction (% f);", 1.0f]]; – rpetrich

+0

¿Lo conseguiste para trabajar? ¿Se llama a la función myJavascriptFunction? En mi código no ... ¿cómo puedo verificar con seguridad si la llamada se está realizando? – Hectoret

4

Usted va a cargar el código HTML de su propio paquete que implica que usted tiene control total sobre él. ¿Por qué no simplemente parametrizar el HTML con los campos que desea? Podría agregar fácilmente algunos campos de entrada ocultos a los que su javascript podría acceder. Digamos que su HTML era la siguiente:

<body> 
<form> 
Static Field 1: <input type="text" name="field1"><br> 
Static Field 2: <input type="text" name="field2"><br> 
%@ 
</form> 
</body> 

Ahora acaba de leer estos datos en una cadena y formatear el% @ con algunos campos ocultos de esta manera:

NSString *input = @"<input type=\"hidden\" name=\"field3\"><br>"; 
NSString *formatted = [NSString stringWithFormat:html, input]; 

luego llamar a -loadHTMLString: en la vista web.

[webView loadHTMLString:formatted baseURL:nil]; 

Hay alguna razón por la que no podría hacerlo de esa manera. Ahora su javascript puede agarrar el valor del campo de entrada oculto con una llamada a:

document.getElementsByName('field3')[0].value; 
3

Puede insertar en tu archivo html locales de un javascript para analizar el GET-petición

<script language="javascript"> 
function getget(name) { 
     var q = document.location.search; 
     var i = q.indexOf(name + '='); 

     if (i == -1) { 
      return false; 
     } 

     var r = q.substr(i + name.length + 1, q.length - i - name.length - 1); 

     i = r.indexOf('&'); 

     if (i != -1) { 
      r = r.substr(0, i); 
     } 

     return r.replace(/\+/g, ' '); 
    } 
</script> 

Uso getget ('parameter_name') para obtener el parámetro de la cadena de solicitud.

0

Luego llame -loadHTMLString: en la vista web.

yo creo que él estaba evitando el uso de loadHTMLString en lugar de loadRequest porque rompe la espalda y botones de avance de la UIWebView

24

La mejor y realmente trabajar respuesta, sólo en ObjC (recuerde que debe mantener la estructura de carpetas - copiar archivos en xcode usando "Crear referencias de carpetas para cualquier carpeta agregada")

NSString *path = [[NSBundle mainBundle] 
     pathForResource:@"YOUR-HTML-FILE" 
     ofType:@"html" 
     inDirectory:@"YOUR-FOLDER" ]; 
NSURL *url = [NSURL fileURLWithPath:path]; 



NSString *theAbsoluteURLString = [url absoluteString]; 

NSString *queryString = @"?var=1232123232"; 

NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString: queryString]; 

NSURL *finalURL = [NSURL URLWithString: absoluteURLwithQueryString]; 

NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ]; 

[web loadRequest:request]; 
+0

¿Qué pasa con Swift? Lo intenté y está funcionando. – NikeAlive

+0

Este anser me ayuda mucho – inix

7

La forma de Marjan es la forma correcta de hacerlo funcionar.

Como mi amigo Terence lo señaló, el truco es usar el archivo absoluto uri (archivo: //) cadena al crear la URL de la cadena correctamente. De esta manera ? el carácter no se codifica, y webview puede cargar el archivo correctamente.

[NSURL URLWithString: @"file://localhost/Users/sj/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/../PrintingWebView.app/final.html?slide=2"]; 

o uso URLWithString: Método relativeToURL

NSURL *relativeURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
NSURL *u = [NSURL URLWithString:@"html/index.html?site=2" relativeToURL:relativeURL]; 
+1

¡Solución más simple! – inix

Cuestiones relacionadas