博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS与JS交互
阅读量:4584 次
发布时间:2019-06-09

本文共 1369 字,大约阅读时间需要 4 分钟。

① 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];  

      }

 

转载于:https://www.cnblogs.com/reyalPDC/p/6376167.html

你可能感兴趣的文章
取消后续事件
查看>>
如何监测谁用了SQL Server的Tempdb空间?
查看>>
oracle group by 显示其他字段
查看>>
这句话很恐怖,谨记。
查看>>
python实现简单消息总线
查看>>
Python中re(正则表达式)模块学习
查看>>
一对一关系
查看>>
git命令的使用 【备用】
查看>>
uva1391 2-SAT 问题
查看>>
数据类型
查看>>
Java秒杀系统实战系列~整合Shiro实现用户登录认证
查看>>
js功能汇总
查看>>
C. Magic Ship cf 二分
查看>>
Android(java)学习笔记107:Relativelayout相对布局
查看>>
leetcode[90]Subsets II
查看>>
hlg1175小陈老师、桌子、盘子【计算几何】
查看>>
SSH服务器拒绝了密码,xshell连不上虚拟机怎么办
查看>>
Swoole RPC 的实现
查看>>
动态规划求两个序列的最长公共子序列
查看>>
课堂随笔
查看>>