2011-11-29 87 views

回答

10

您可以在Obj-C的UIWebView中執行JavaScript。只需撥打[webView stringByEvaluatingJavaScriptFromString:@"myJavaScript"];即可。

我能想象這樣的設置:

頁面

<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

謝謝,它的工作原理。有沒有一種方法可以從JavaScript調用iOS的功能? – jAckOdE

+1

你甚至讀過我的回答嗎?我知道它沒有示例代碼,但它對您評論中的問題有答案。 –

+3

實現一個像Johan Kool建議的自定義URL方案,然後像這樣從JS「myapp:// parameter1/parameter2/parameter3」調用你的url來使這個工作你還需要實現方法「 - (BOOL)application:(UIApplication *)應用程序handleOpenURL:(NSURL *)url「在您的應用程序委託。以下是一個完整的教程:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html –

1

我們的JavaScript加載自定義URL,您的應用攔截。它可以解析它,準備數據並通過stringByEvaluatingJavaScriptFromString:傳遞到您的網頁。

+0

您好,這裏是我是如何實現它: – jAckOdE

+0

我有一個函數jsfunc(){location.href =「一個自定義url」},我使用webView:shouldStartLoadWithRequest:navigationType來處理url並調用本地函數。問題是本地函數返回一個字符串,而jsfunc()應該返回該字符串。怎麼做?我通過使用stringByEvaluatingJavaScriptFromString從本地代碼調用另一個js函數並將返回字符串傳遞給它,但是如果jsfunc()可以直接返回它會更好。 – jAckOdE

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

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

提供反饋到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 
    } 
} 

我還寫了一篇關於如何在iOS中調用和處理不同的JavaScript函數的指南。 http://www.dplusmpage.com/2012/07/20/execute-javascript-on-ios/

4

我創建了一個iOS/JS庫來幫助簡化這個過程 - 也就是說,使用類似的方法在兩個方向上進行通信。您可以點擊此處查看:https://github.com/tcoulter/jockeyjs

相關問題