2011-10-07 15 views
11

Ho una pagina web. Ho un file javascript che fa un sacco di cose. Nell'app ho una NSString con alcuni dati cruciali che devono essere elaborati nel file javascript. Come posso ottenere il valore della stringa in un determinato punto del mio html in modo che il mio javascript possa leggerlo?iOS UIWebView Javascript - inserisci dati - ricevi callback?

Inoltre, il javascript produrrà determinati dati quando vengono eseguite azioni (come la pressione di un pulsante), come posso recuperare i dati dalla webview/javascript in modo che possano essere memorizzati nell'app?

risposta

17

Puoi chiamare un metodo javascript e passare il valore utilizzando questo

NSString *selectedValue = [webViewInstance stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getAndReturnRadioValue(%d)", questionCounterIntValue]]; 

Ma per far scattare indietro da javascript è necessario utilizzare un metodo di soluzione alternativa,

Implementare il seguente metodo di webViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 

    NSLog(@"passed data from web view : %@",[[request URL] query]); 

    if([[[request URL] query] isEqualToString:@"clickedOnLineNo"]) 
    { 
     //Do your action here  
    } 
} 

si deve navigare a un URL falso dal tuo metodo javascript come,

window.location = "someLink://yourApp/form_Submitted:param1:param2:param3"; 

su un tasto di scatto o la vostra azione richiesta.

Si potrebbe dare un'occhiata alla mia risposta per questa domanda Submit a form in UIWebView

+0

Puoi approfondire ulteriormente il recupero dei dati dal javascript? Ad esempio, se fai clic su un pulsante nell'html, verrà attivata una funzione JavaScript. Quella funzione ha un valore di ritorno di cui ho bisogno. Come ottengo quel valore di ritorno? – spentak

+0

Come accennato nella risposta, accedi a un URL dalla tua funzione JS: attiverà il metodo delegato. – sElanthiraiyan

4
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script 

suona esattamente come il metodo necessario. Se, ad esempio, la necessità di input e output di interagire con il JavaScript può essere fatto con un unico metodo, è possibile passare un valore in JavaScript e ottenere i risultati con qualcosa come il seguente codice:

NSString* jsCode = [NSString stringWithFormat:@"doSomething('%@')", dataToPass]; 
NSString* resultFromJavaScript = [webView stringByEvaluatingJavaScriptFromString:jsCode]; 
+0

mi mancava il '' che circonda% @ ... Uff, dopo 1 ora! Grazie –

0

Hi siamo in grado di inviare i dati da Objective C a JavaScript e in grado di callback da JavaScript facilmente

objectve c -> javaScript

In classe objectve c

NSData *locationCountData = [NSJSONSerialization dataWithJSONObject:locationCount options:NSJSONWritingPrettyPrinted error:nil]; 
NSString *locationCountString = [[NSString alloc] initWithData:locationCountData encoding:NSUTF8StringEncoding]; 

NSData *locationCountData = [NSJSONSerialization dataWithJSONObject:locationCount options:NSJSONWritingPrettyPrinted error:nil]; 
NSString *locationCountString = [[NSString alloc] initWithData:locationCountData encoding:NSUTF8StringEncoding]; 

NSString *str = [NSString stringWithFormat:@"testFunction(%@,%@)",locationCountString, locationsListString]; 
[self.myWebView stringByEvaluatingJavaScriptFromString: str]; 

in file JavaScript

<script type="text/javascript"> 
function testFunction(locationCount,locationList) 
{ 
    alert(locationCount + locationList); 
} 
</Script>