iOS原生应用和网页之间的通信javascript

时间:2011-11-29 08:12:09

标签: javascript ios

我在UIWebView中加载了一个网页,该页面的javascript函数需要来自本机iOs应用程序(NSString)的数据。 Js函数如何访问本机应用程序中的数据?

谢谢,

lvreiny

6 个答案:

答案 0 :(得分:11)

您可以在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>

<强>目标C

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

答案 1 :(得分:7)

使用WebViewJavaScriptBridge,您可以实现javaScript和iOS之间的双向通信。

请查看以下链接以获取WebViewJavaScriptBridge。

我将这个桥接器用于iOS和JS之间的通信应用程序,反之亦然。

https://github.com/marcuswestin/WebViewJavascriptBridge

答案 2 :(得分:4)

我创建了一个iOS / JS库来帮助简化这一过程 - 也就是说,使用类似方法在两个方向上进行通信。您可以在此处查看:https://github.com/tcoulter/jockeyjs

答案 3 :(得分:1)

让javascript加载您的应用拦截的自定义网址。它可以解析它,准备数据并通过stringByEvaluatingJavaScriptFromString:将其传递到您的网页。

答案 4 :(得分: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/

答案 5 :(得分:0)

此处提供此示例代码,您可以查看它......非常有用

http://ramkulkarni.com/blog/framework-for-interacting-with-embedded-webview-in-ios-application/