首页 > 代码库 > iOS与JS交互

iOS与JS交互

① iOS -> JS

原理:通过WebView的方法直接调用JS代码

[WebView stringByEvaluatingJavaScriptFromString:@"A"];

// 这里的 A 就是WebView中的html所对应的JS代码

eg.

1)这里一个html所包含的js文件内的一个public方法

技术分享

2)这是一个.m(iOS)文件内的一个WebView的调用1)中js方法的写法

技术分享

3)那么在js的对应方法中,就会得到来自iOS的参数

 

② JS -> iOS

原理:iOS端的WebView的协议函数回调可以获取到其内部html元素的变化以及相应值,JS端只需变化内部元素即可

步骤一:JS端的处理

技术分享

步骤二:JS端添加子元素后iOS端的回调

WebView   -   UIWebViewDelegate

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSMutableURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

   //获取JS端元素变化后的请求字符串(得到BC?D=d)

  NSString *reqString = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

  // B 可以作为判断Flag

  // C 是调用的iOS的方法名称

  // ? 为分隔符

  // D 为参数名称

  // = 就是等于号,没啥意思

  // d 为具体参数(请以json格式传输,因为iOS的SEL的参数限制)

 

  // 得到了方法名以及参数之后得到SEL对象

  SEL sel = NSSelectorFromString([methodName stringByAppendingString:@":"]);

  // 也可以得到参数string to dictionary

  NSData *jsonData = [C dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *argsInfo = [NSJSONSerialization JSONObjectWithData:jsonData
                                                        options:NSJSONReadingMutableContainers
                                                          error:&err];
  // 方法有了,参数也有了,调用,参数是以dictionary的形式给出的
  

  if ([self respondsToSelector:sel]) {

    // 调用方法C,参数为一个字典(iOS中的方法C的参数也应当为dictionary)

          [self performSelector:sel withObject:argsInfo];  

      }

 

iOS与JS交互