2011-10-10 9 views
7

Mam nadzieję, że będę mógł korzystać z PhoneGap dla mojej aplikacji. Będę musiał zbudować niestandardowy protokół/wtyczkę, aby móc wywoływać metody natywne z Javascript. Wiem, że możesz wywołać funkcję sukcesu w JavaScript, gdy natywny kod zwróci.Czy można wywołać funkcję javascript z natywnego kodu (nie w wywołaniu zwrotnym) za pomocą PhoneGap i iOS?

To, co muszę zrobić, to wywołać funkcję javascript z natywnego kodu. Zasadniczo aplikacja połączy się z aplikacją towarzyszącą OSX w sieci lokalnej, a kiedy aplikacja OSX wysyła dane do aplikacji iOS, jest przetwarzana w metodzie C, muszę być w stanie wysłać wynik do PhoneGap/javascript i zrobić coś z nim w WebView.

Czy to możliwe? Mogłem tylko znaleźć informacje na temat wywoływania natywnego z javascript, a nie na odwrót.

Dzięki, Thomas

Korzystanie kod Odpowiedź poniżej tutaj:

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

Dając mi błąd „Unknown 'theWebView odbiornik' nie znaczy 'UIWebView' ?

UPDATE: znalazłem odpowiedź: Korzystanie z pomocnika PhoneGap mogę napisać coś takiego ...

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

Odpowiedz

4

Znaleziony pomocnika PhoneGap do osiągnięcia tego ... Napisz skrypt do Webview używając:

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

Czy możesz proszę rozwinąć swoją odpowiedź. Mam ten sam problem i jestem nowy w Cordovie. Wywołałem go z MainViewController, a także z mojej wtyczki Phonegap, nie odpowiedział w widoku internetowym. Czy ich coś mi brakuje? – bhuwansahni

+0

@bhuwansahni Obawiam się, że cordova mogła się bardzo zmienić od czasu, gdy to zrobiłem, więc nie jestem do końca pewien, co będzie potrzebne teraz. Mogłem to tak nazwać z dowolnej metody w mojej aplikacji - może sprawdź ten artykuł na temat dokumentów, aby uzyskać więcej informacji: http://docs.phonegap.com/en/2.0.0/guide_plugin-development_ios_index.md. html – tsdexter

0

Czy to praca dla Ciebie?

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

Zrobione z tej strony:

Można również zadzwonić do funkcji JavaScript z argumentów. Załóżmy, że napisałeś funkcję JavaScript, która wygląda następująco:

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

Jego celem jest dodanie obrazu do strony internetowej. Jest wywoływana za pomocą trzech argumentów: obrazu, adresu URL obrazu; szerokość, szerokość ekranu obrazu; i wysokość, wysokość ekranu obrazu. Możesz wywołać tę metodę na dwa sposoby z Objective-C. Pierwszą tworzy tablicę argumentów przed użyciem mostu 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

Niestety, jest to specyficzne dla OSX, a PO jest za pomocą PhoneGap i iOS. – darvids0n

+0

Tak, potrzebuję tej funkcji w aplikacji na iOS, a nie w aplikacji Mac OSX Companion. Ale dziękuję. – tsdexter

10

Można łatwo wywołać JavaScript z natywnego kodu z UIWebView:

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

Aby użyć wynik funkcji gdzieś jako arg do funkcji JS:

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

Awesome to powinno działać dla mnie. Nawet nie myślałem o używaniu klasy UIWebView, byłem chyba zbyt skoncentrowany na interfejsie API PhoneGap. Dzięki wielkie! – tsdexter

+0

Musisz czekać 4 minuty, aby zaakceptować ... – tsdexter

+0

Dzięki za aktualizację. To prawdopodobnie byłoby moje następne pytanie. – tsdexter

1

Należy spróbować tego

[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"]; 
Powiązane problemy