2011-11-29 83 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

相关问题