2011-11-29 19 views

Odpowiedz

10

Możesz uruchomić JavaScript w swoim UIWebView z Obj-C. Wystarczy zadzwonić pod numer [webView stringByEvaluatingJavaScriptFromString:@"myJavaScript"];.

mogłem wyobrazić sobie konfigurację takiego:

internetowa

<html> 
    <head> 
     <script type="text/javascript"> 
     function callmeFromObjC(para1) { 
      // do something 
      alert(para1); 
     } 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

Objective-C

NSString *myParameter = @"myParameter"; 
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"callmeFromObjC('%@')", myParameter]]; 
+0

dzięki, to działa. czy istnieje sposób, który pozwala wywołać funkcję iOS z javascript? – jAckOdE

+1

Czy przeczytałeś nawet moją odpowiedź? Wiem, że nie ma przykładowego kodu, ale ma odpowiedź na pytanie w twoim komentarzu. –

+3

Implementacja niestandardowego schematu URL, takiego jak Johan Kool, zasugerował, a następnie wywołaj swój adres URL w ten sposób z JS "myapp: // parametr1/parametr2/parametr3", aby to działało, musisz również wdrożyć aplikację "- (BOOL): (UIApplication *) application handleOpenURL: (NSURL *) url "w delegacie aplikacji. Oto kompletny tutorial na ten temat: http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-ustom-url-scheme.html –

1

Niech załadować javascript niestandardowy adres URL, który przechwytuje Twoich aplikacji. Można go przeanalizować, przygotować dane i przekazać na stronie internetowej pod numerem stringByEvaluatingJavaScriptFromString:.

+0

cześć, tutaj jest jak I wdrożone go: – jAckOdE

+0

mam funkcja jsfunc() {location.href = "niestandardowy URL"}, używam webView: shouldStartLoadWithRequest: navigationType do obsługi adresu URL i wywoływania funkcji natywnej. Problem polega na tym, że natywna funkcja zwraca ciąg, a jsfunc() powinien zwróć ten ciąg. Jak to zrobić? Zrobiłem obejście problemu, wywołując inną funkcję js z kodu natywnego za pomocą stringByEvaluatingJavaScriptFromString i przekazując do niego łańcuch powrotny, ale byłoby lepiej, gdyby jsfunc() mógł zwrócić ją bezpośrednio. – jAckOdE

1
[webView loadHTMLString:@"<script src=\"filename.js\"></script>" 
     baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]]; 

NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"function(parameter)"]; 

Daj zwrotne iOS

window.location = customprefix://function/parameter=value 

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([[URL scheme] isEqualToString:@"customprefix"]) { 
     // handle function name and paramters 
    } 
} 

Napisałem również poradnik jak wywoływać i obsługiwać różne funkcje javascript z poziomu iOS. http://www.dplusmpage.com/2012/07/20/execute-javascript-on-ios/

7

Dzięki WebViewJavaScriptBridge można osiągnąć dwukierunkową komunikację między javaScript i iOS.

Sprawdź poniższy link dla WebViewJavaScriptBridge.

Użyłem tego mostu dla jednej z moich aplikacji do komunikacji między iOS i JS, a także na odwrót.

https://github.com/marcuswestin/WebViewJavascriptBridge.

Powiązane problemy