iOS与JS交互-程序员宅基地

技术标签: json  

https://cdking.github.io/UIWebView-JS.io/

① 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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aisi64663/article/details/102356947

智能推荐

使用smsx.cab控件做web打印使用方法(转)-程序员宅基地

注意:在使用之前先告诉下我的痛苦经历在做WEB项目是我的JSP页面在jsp文件夹里,我把smsx.cab放在js文件夹里(jsp和js是用级别目录)在本机上测试可以正确下载控件,但是部署到测试服务器上后无法下载,浏览器报控件名称不可用错误,在网上找了半天资料都没法解决其实问题是在路径问题我不敢确定具体原因,但是我最后把smsx控件移到jsp文件夹下,问题就解决了,所以这个...

winhex数据恢复入门教程_unreadablesector-程序员宅基地

Winhex是X-Ways公司出品的一款十六进制编辑、磁盘编辑软件,其公司网站对其功能介绍如下: 可以对硬盘、软盘、CD-ROM、DVD、ZIP及各种存储卡进行编辑 支持FAT、NTFS、Ext2/3、ReiserFS、Reiser4、UFS、CDFS、UDF等文件系统 可支持重组RAID及动态磁盘 附带数据恢复功能 可以访问物理内存及虚拟内存 内置数据解释器,可以识别解释20种数据类型 可以用数据结构模板查看、编辑结构数据_unreadablesector

fyne-gui-demo8选择框组-程序员宅基地

fyne-gui-demo8选择框组示例图如下:package mainimport ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/widget")// Layout 界面ui设计--互斥按钮func Layout() fyne.CanvasObject { var start

大量阅读,并不等同于走马观花-程序员宅基地

01、大量阅读有什么好处开门见山地说吧,大量阅读有以下四个好处,并且是显而易见的。1)可以很快地看懂文章,抓住重点这一点,在做英语卷子的《阅读理解》时,最深有体会了。如果词汇量不够的话,做《阅读理解》的时候注定蒙圈。相反,词汇量足够的话,就能很快地在短文中找出问题的答案。同样的道理,如果我们没有大量阅读的话,怎么可能看懂一篇文章,又抓住它的重点呢?2)可以正确地表达自..._大量阅读

FFmpeg任意格式转码(比如:AVI、MP4、WMV、FLV等)_ffmpeg转avi为webm-程序员宅基地

1.:fmpeg官网下载地址:http://www.ffmpeg.org/download.html2:下载windows、linux2.1:下载windows 2.2:下载linux和命令3:/** * 多种类型转码 * @param path(比如:http://localhost:8081/2021/06/27/21546789.avi) * @param type(转码类型) * @param ffmpegT..._ffmpeg转avi为webm

java 连接 websphere_本地java类访问websphere的JNDI-程序员宅基地

#问题1、获取数据源时报错#javax.naming.NoInitialContextException:Needtospecifyclassnameinenvironmentorsystemproperty,orasanapplet#代码:dataSource=(DataSource)envCtx.lookup("jdbc/admin");#原因:本地测试如果..._java应用获取websphere8.5的jndi数据源

随便推点

Cocos creator入门------预制体以及计时器_cocos获取预设体组件-程序员宅基地

直接贴代码吧// 预(提前)制体 @property(cc.Prefab)//预制体类型 myPrefab:cc.Prefab=null;//需要被克隆的对象 //程序运行后加载对象 start(){ var loadobj =cc.instantiate(this.myPrefab);//将预制体克隆到..._cocos获取预设体组件

ACM题目中输入数据的处理(C++版)-程序员宅基地

ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794  ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍。实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍。  实际上,这些模式不仅是OJ

企业邮箱怎么选|选择腾讯、网易、TOM企业邮箱需要注意的方方面面_登录mail后,如何选择企业邮箱-程序员宅基地

企业邮箱哪个更好用你觉得呢?今天给大家说一说注册腾讯、网易、TOM企业邮箱的方方面面,学到就是赚到,你也可以成为一个知道企业邮箱如何选择的邮箱人企业邮箱的收费方式现在市场上的TOM企业邮箱是按照账号数量收费,五个账号起注册。所以不必担心自己小公司企业邮箱就不可以注册,不论公司大小,只要你需要企业邮箱你就可以注册选择企业邮箱需要注意什么?在挑选邮箱的时候注册产品的功能和实用性,现在的大品牌都是有着二十年的发展经验,对于企业邮箱都是建立在数次更新迭代上完成的,所以使用更放心企业邮箱选择需要技巧,如果_登录mail后,如何选择企业邮箱

十大MES系统排行 制造执行系统 生产管理系统榜中榜_十大mes软件厂家-程序员宅基地

MES系统十大品牌数据由CN10排排榜技术研究部门和CNPP品牌数据研究部门通过资料收集整理,并基于大数据统计及人为根据市场和参数条件变化的分析研究专业测评而得出,是大数据、云计算、数据统计真实客观呈现的结果。更多行业榜单尽在买购网。1SIEMENS西门子西门子始于1847年德国,业务遍及全球200多个国家,是专注于电气化、自动化和数字化领域的全球领先的技术企业。凭借卓越的专业技能和经验,致力于为全世界以及中国的可持续发展提供专业的高效能源和节约型资源技术。2Honeywell霍尼韦尔霍..._十大mes软件厂家

POJ 2704-程序员宅基地

1 #include <iostream> 2 #include <string> 3 #define LL long long 4 #define MAXN 100 5 using namespace std; 6 7 int dis[2][2] = {1,0,0,1}; 8 9 int _m[MAXN][MAXN];10 L...

docker映射问题和常用命令_docker创建容器命令映射问卷-程序员宅基地

docker常见问题和常用命令之前在项目部署在docker里发现不能正常的运行,网上百度了一下原因。docker 镜像和容器docker 就是为了方便配置环境,使得项目的开发和上线不用适配各种环境。因为我们开发测试和项目正式上线的时候环境肯定是不同的,很多时候因为版本的差异会导致很多的问题,比如Mysql的版本,redis版本,还有liunx系统各种依赖的版本,这些差异都有可能会导致项目的运行失败,所以统一的开发测试和部署环境就显得尤为重要了。docker镜像和容器的关系通俗的说就像 软件包和正_docker创建容器命令映射问卷