2009-08-19 12 views
5

È possibile eseguire qualche codice javascript (avendo forse un NSString come input) senza utilizzare uno UIWebView? Mi piacerebbe eseguire questo codice in un thread separato in modo che UIWebView non sia possibile e non voglio veramente renderizzare nulla, ma solo recuperare i risultati.Eseguire javascript senza UIWebView possibile?

risposta

3

Non ho provato questo, ma qui è una sola idea:

codice Scrivi per assegnare un vuoto UIWebView, ma non inserirlo come una visualizzazione secondaria ovunque, e basta chiamare direttamente - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script sul tuo javascript.

Quindi utilizzare NSOperation per eseguirlo in parallelo.

Qualsiasi motivo che potrebbe non funzionare per voi? Penso che eviterebbe di visualizzare qualcosa per lo UIWebView.

Come nota a margine, non riesco a pensare a qualcosa che puoi fare in javascript che non puoi fare più velocemente direttamente in Objective-C. Tranne forse l'analisi javascript che si ottiene esternamente, che può essere considerato un no-no da Apple, a seconda dei dettagli.

Indovinare i propri obiettivi: se si desidera analizzare una risposta del server JSON, si consiglia lo json-framework library hosted on google code. Ha una bella interfaccia ed è sorprendentemente facile da imparare e integrare.

+2

Questo non sembra funzionare, per ogni metodo UIWebView che provo a chiamare ottengo "bool _WebTryThreadLock (bool), 0xf42930: Ho cercato di ottenere il blocco web da un thread diverso dal thread principale o dal thread Web. Questo potrebbe essere il risultato di una chiamata a UIKit da un thread secondario. * Per quanto riguarda le mie ragioni, per lo più sto sperimentando :) – user130444

+0

A meno che non sia esplicitamente documentato, non è sicuro chiamare QUALSIASI metodo diverso da mantenere * su un oggetto UIKit. Quindi non mi aspetto che questo funzioni mai. –

+0

* tecnicamente la release è sicura da thread da sola, ma se sei l'ultima persona a rilasciare un oggetto, potrebbe causare l'esecuzione di dealloc sul thread, che non è sempre sicuro. –

0
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(getResults:) userInfo:nil repeats:YES]; 

-(void)getResults 
{ 
    NSString *value = [self.webView stringByEvaluatingJavaScriptFromString:@"javascript"]; 
} 

Qualsiasi motivo non si può semplicemente fare qualcosa di simile. Non dovrebbe essere un grosso sovraccarico sul tuo thread principale.

Problemi correlati