È 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
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.
Penso che l'articolo di Parmanoir Taming JavascriptCore within and without WebView potrebbe darti qualche consiglio.
JavaScriptCore non è esposto nell'SDK (WebKit è un framework privato) ma il collegamento è molto interessante, grazie! – user130444
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.
- 1. È possibile interagire con UIWebView senza toccare?
- 2. UIWebView: puoi disabilitare Javascript?
- 3. Come eseguire HTML + file javascript eseguito su UIWebView. .?
- 4. UIwebview senza cache
- 5. Calling Javascript utilizzando UIWebView
- 6. iOS UIWebView Timer Javascript
- 7. Come eseguire correttamente l'autenticazione in UIWebView?
- 8. È possibile eseguire RAII senza eccezioni?
- 9. È possibile eseguire gli script Node.js senza richiamare `node`?
- 10. È possibile eseguire UPnP Discovery da Javascript?
- 11. Chiudi UIWebView utilizzando javascript: window.close();
- 12. Sospendi l'esecuzione JavaScript in UIWebView
- 13. Aprire i collegamenti popup in UIWebView, possibile?
- 14. JavaScript interrotto nella callback "Start Load" di UIWebView
- 15. È possibile eseguire un menu a discesa senza Javascript o Jquery
- 16. è possibile utilizzare iframe in UIWebView?
- 17. UIWebView contentInset senza altezza supplementare in fondo
- 18. iOS UIWebView Javascript - inserisci dati - ricevi callback?
- 19. Ottenere valore restituito da JavaScript UIWebView
- 20. Perdite di memoria con UIWebView e Javascript
- 21. Cancella credenziali da UIWebView con JavaScript
- 22. UIWebView Esporre Objective C a JavaScript
- 23. Iniezione di CSS in UIWebView tramite JavaScript
- 24. È possibile eseguire Cucumber in Java senza la JRuby/gems?
- 25. È possibile eseguire Hadoop in operazioni Pseudo-Distribuite senza HDFS?
- 26. È possibile eseguire un'app Adobe AIR senza installazione?
- 27. È possibile eseguire un emulatore Android senza impostare Eclipse
- 28. È possibile eseguire il pagerank senza l'intero set di dati?
- 29. È possibile configurare Heroku per eseguire una distribuzione senza problemi?
- 30. UIWebView stringByEvaluatingJavaScriptFromString in background
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
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. –
* 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. –