2011-10-10 8 views
7

Spero di poter usare PhoneGap per la mia app. Dovrò creare un protocollo/plugin personalizzato in modo da poter chiamare i metodi nativi da Javascript. So che puoi chiamare una funzione di successo nel Javascript quando ritorna il codice nativo.È possibile chiamare una funzione javascript dal codice nativo (non in una richiamata) utilizzando PhoneGap e iOS?

Quello che devo essere in grado di fare è chiamare una funzione javascript dal codice nativo. Fondamentalmente l'app si connetterà a un'app complementare OSX sulla rete locale e quando l'app OSX invia i dati all'app iOS viene elaborata in un metodo Objective C, devo essere in grado di inviare il risultato in PhoneGap/javascript e fare qualcosa con esso nella WebView.

È possibile? Sono stato solo in grado di trovare informazioni sulla chiamata nativa da javascript, non viceversa.

Grazie, Thomas

Utilizzando il codice dalla risposta qui sotto qui:

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]; 
} 

dandomi l'errore di 'ricevente Unknown 'theWebView' intendeva dire 'UIWebView' ?

UPDATE: trovato la risposta: utilizzando l'helper PhoneGap posso scrivere qualcosa di simile ...

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

risposta

4

Trovato l'helper PhoneGap per raggiungere questo obiettivo ... Scrivere javascript per il WebView utilizzando:

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

Puoi per favore elaborare la tua risposta. Sto avendo lo stesso problema e sono nuovo di Cordova. L'ho chiamato dal MainViewController e anche dal mio plugin Phonegap, non ha risposto nella webview. La loro cosa mi manca? – bhuwansahni

+0

@bhuwansahni Temo che il cordova possa essere cambiato molto da quando l'ho fatto, quindi non sono abbastanza sicuro di cosa sarebbe necessario ora. Sono stato in grado di chiamarlo in questo modo da qualsiasi metodo nella mia app - forse controlla questo articolo sui documenti per maggiori informazioni: http://docs.phonegap.com/en/2.0.0/guide_plugin-development_ios_index.md. html – tsdexter

0

Sarà questo lavoro per te?

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

Tratto da questa pagina:

è anche possibile chiamare funzioni JavaScript con argomenti. Si supponga di aver scritto una funzione JavaScript che assomiglia a questo:

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

Il suo scopo è quello di aggiungere un'immagine a una pagina web. Si chiama con tre argomenti: immagine, l'URL dell'immagine; larghezza, la larghezza dello schermo dell'immagine; e altezza, l'altezza dello schermo dell'immagine. Puoi chiamare questo metodo in due modi diversi dall'Obiettivo-C. Il primo crea l'array di argomenti prima di utilizzare il ponte 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

Purtroppo, questo è OSX-specifici, e l'OP sta usando PhoneGap e iOS. – darvids0n

+0

Sì, ho bisogno di questa funzionalità sull'app per iOS, non su quella per Mac OSX Companion. Grazie comunque. – tsdexter

10

Si può facilmente chiamare JavaScript dal codice nativo con un UIWebView:

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

Per utilizzare il risultato di una funzione da qualche parte come un arg a una funzione JS:

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

Impressionante questo dovrebbe funzionare per me. Non pensavo nemmeno di usare la classe UIWebView, ero troppo concentrato sull'API PhoneGap, credo. Grazie mille! – tsdexter

+0

Devo aspettare 4 minuti per accettare ... – tsdexter

+0

Grazie per l'aggiornamento. Quella probabilmente sarebbe stata la mia prossima domanda. – tsdexter

1

Si dovrebbe provare questo,

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