2011-11-29 13 views

cevap

10

Obj-C'den UIWebView'unuzda JavaScript'i çalıştırabilirsiniz. Sadece [webView stringByEvaluatingJavaScriptFromString:@"myJavaScript"];'u arayın.

Böyle bir kurulum düşünebiliriz:

Web

<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

teşekkürler, işe yarıyor. iOS'un işlevini javascript'ten çağırmanın bir yolu var mı? – jAckOdE

+1

Cevabımı okudun mu? Örnek kodun olmadığını biliyorum, ancak yorumunuzdaki soruya cevap veriyor. –

+3

Johan Kool'un önerdiği gibi özel bir URL şeması uygulayın ve daha sonra bu URL'yi "myapp: // parameter1/parameter2/parameter3" adresinden bu URL'niz gibi çağırın. "- (BOOL) uygulama yöntemini de uygulamanız gerekir: (UIApplication *) uygulama tanıtıcınızOpenURL: (NSURL *) url "app delegate. İşte tam bir öğretici: http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html –

1

javascript hangi uygulama yakaladığını özel bir URL, destek verin. Bunu ayrıştırabilir, verileri hazırlayabilir ve web sayfanıza stringByEvaluatingJavaScriptFromString: aracılığıyla iletebilir.

+0

merhaba, burada: – jAckOdE

+0

i var Bir işlev jsfunc() {location.href = "bir özel url"}, webView kullanıyorum: shouldStartLoadWithRequest: url'yi işlemek ve yerel bir işlevi çağırmak için navigationType. Sorun, yerel işlevin bir dize döndürmesi ve jsfunc() Bu ipi geri ver. Nasıl yapılır? StringByEvaluatingJavaScriptFromString kullanarak başka bir js işlevini başka bir js işlevi çağırarak ve returntring'i ona ileterek bir geçici çözüm yaptım, ancak jsfunc() doğrudan döndürüp döndürürse daha iyi olur. – jAckOdE

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

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

iOS

geri bildirim verme
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 
    } 
} 

Ayrıca, iOS içinden farklı javascript işlevlerini nasıl arayacağınız ve nasıl işleyeceğimiz konusunda bir kılavuz yazdım. http://www.dplusmpage.com/2012/07/20/execute-javascript-on-ios/

7

WebViewJavaScriptBridge ile javaScript ile iOS arasında iki yönlü iletişim sağlayabilirsiniz.

WebViewJavaScriptBridge için aşağıdaki bağlantıyı kontrol edin.

Bu köprüyü iOS ve JS arasındaki iletişim için kullandığım uygulamalardan biri için de kullanıyorum.

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

4

Bunu kolaylaştırmaya yardımcı olmak için bir iOS/JS kitaplığı oluşturdum - yani benzer yöntemlerle her iki yönde iletişim. Burada bunu kontrol edebilirsiniz: https://github.com/tcoulter/jockeyjs

İlgili konular