2009-08-19 13 views
5

¿Es posible ejecutar código JavaScript (tal vez tener un NSString como entrada) sin utilizar un UIWebView? Me gustaría ejecutar este código en un hilo separado para que UIWebView no sea posible y realmente no quiero renderizar nada, solo recuperar los resultados.¿Es posible ejecutar javascript sin UIWebView?

Respuesta

3

No he probado esto, pero aquí está una idea:

Escribir código para asignar un vacío UIWebView pero no lo agrega como una subvista cualquier lugar, y simplemente llame directamente - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script en su Javascript.

A continuación, utilice NSOperation para funcionar que en paralelo.

¿Alguna razón que podría no funcionar para usted? Creo que evitaría mostrar nada para el UIWebView.

Como nota al margen, no puedo pensar en algo que puede hacer en javascript que no se puede hacer más rápido directamente en Objective-C. Excepto tal vez el análisis de javascript que obtiene externamente, lo que puede ser considerado un no-no por parte de Apple, dependiendo de los detalles.

Las conjeturas sobre sus metas: Si desea analizar una respuesta del servidor JSON, recomiendo el json-framework library hosted on google code. Tiene una interfaz agradable, y es sorprendentemente fácil de aprender e integrar.

+2

Esto no parece funcionar, por cada método UIWebView que trato de llamar obtengo "bool _WebTryThreadLock (bool), 0xf42930: Intenté obtener el bloqueo web de un hilo que no sea el hilo principal o el hilo web. puede ser el resultado de llamar a UIKit de un hilo secundario. estrellarse ahora ..." en cuanto a mis razones, estoy experimentando sobre todo :) – user130444

+0

a menos que explícitamente documentada, no es seguro para llamar a cualquier método que no sea retener el * un objeto UIKit. Entonces no esperaría que esto funcione alguna vez. –

+0

* el lanzamiento técnico es seguro para hilos por sí mismo, pero si usted es la última persona en liberar un objeto, puede causar que se ejecute dealloc en su hilo, lo que no siempre es seguro. –

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

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

Cualquier razón por la que no puedas hacer algo como esto. No debería ser tan grande como una sobrecarga en su hilo principal.

Cuestiones relacionadas