2011-10-10 5 views
7

Espero poder usar PhoneGap para mi aplicación. Tendré que crear un protocolo/complemento personalizado para que pueda llamar a los métodos nativos desde el Javascript. Sé que puede llamar a una función de éxito en el Javascript cuando vuelva el código nativo.¿Puedes llamar a una función de JavaScript desde un código nativo (no en una devolución de llamada) usando PhoneGap e iOS?

Lo que necesito hacer es llamar a una función de JavaScript desde el código nativo. Básicamente, la aplicación se conectará a una aplicación complementaria OSX a través de la red local y cuando la aplicación OSX envíe datos a la aplicación iOS se procesa en un método Objective C, necesito poder enviar el resultado a PhoneGap/javascript y hacer algo con eso en el WebView.

¿Esto es posible? Solo he podido encontrar información sobre llamar a native desde javascript, no al revés.

Gracias, Thomas

Utilizando el código de respuesta por debajo aquí:

MyPhoneGapPlugin.m

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { 
    NSLog(@"Connected To %@:%i.", host, port); 

    NSString* jsString = [NSString stringWithFormat:@"alert(connected to: %@);", host]; 
    [theWebView stringByEvaluatingJavaScriptFromString:jsString]; 

    [self readWithTag:2]; 
} 

Dándome el error 'receptor Desconocido 'theWebView' quiso decir 'UIWebView' ?

ACTUALIZACIÓN: encontrado la respuesta: usando el ayudante PhoneGap puedo escribir algo como esto ...

[super writeJavascript:@"alert('connected');"]; 

Respuesta

4

encontrado el ayudante PhoneGap para lograr esto ... Escribe javascript para la web View usando:

[super writeJavascript:@"alert('it works');"]; 
+0

¿Puede por favor elaborar su respuesta? Estoy teniendo el mismo problema y soy nuevo en Córdoba. Lo llamé desde MainViewController y también desde mi complemento Phonegap, no respondió en la vista web. ¿Es algo que me falta? – bhuwansahni

+0

@bhuwansahni Me temo que Cordova puede haber cambiado mucho desde que hice esto, así que no estoy muy seguro de lo que se necesitaría ahora. Pude llamarlo así desde cualquier método en mi aplicación; tal vez consulte este artículo en los documentos para obtener más información: http://docs.phonegap.com/en/2.0.0/guide_plugin-development_ios_index.md. html – tsdexter

0

¿Funcionará para usted?

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html

Tomado de esta página:

También puede llamar a funciones de JavaScript con argumentos. Suponga que ha escrito una función de JavaScript que se parece a esto:

function addImage(image, width, height) { ... } 

Su objetivo es añadir una imagen a una página web. Se llama con tres argumentos: imagen, la URL de la imagen; ancho, el ancho de la pantalla de la imagen; y altura, la altura de la pantalla de la imagen. Puede llamar a este método de dos maneras desde Objective-C. La primera crea la matriz de argumentos antes de utilizar el puente WebScriptObject:

id win = [webView windowScriptObject]; 



NSArray *args = [NSArray arrayWithObjects: 
       @"sample_graphic.jpg", 
       [NSNumber numberWithInt:320], 
       [NSNumber numberWithInt:240], 
        nil]; 

[win callWebScriptMethod:@"addImage" 
      withArguments:args]; 
+0

Por desgracia, esto es OSX-específica, y el PO está usando PhoneGap y el IOS. – darvids0n

+0

Sí, necesito esta capacidad en la aplicación iOS, no en la aplicación Mac OSX Companion. Gracias de cualquier forma. – tsdexter

10

Puede llamar fácilmente JavaScript de código nativo con un UIWebView:

[webView stringByEvaluatingJavaScriptFromString:@"myJSFunction()"]; 

Para utilizar el resultado de una función en algún lugar como una arg a una función JS:

NSString *stringData = getStringData(); // however you get it 
[webView stringByEvaluatingJavaScriptFromString: 
[NSString stringWithFormat:@"myJSFunction(%@)", stringData]]; 
+0

Impresionante, esto debería funcionar para mí. Ni siquiera pensé en usar la clase UIWebView, estaba demasiado concentrado en la API de PhoneGap, supongo. ¡Muchas gracias! – tsdexter

+0

Tiene que esperar 4 minutos para aceptar ... – tsdexter

+0

Gracias por la actualización. Esa probablemente habría sido mi próxima pregunta. – tsdexter

1

Usted debe tratar esto,

[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"]; 
Cuestiones relacionadas