c html联调,JS与native 交互简单应用

JS与native 交互简单应用

一、objectiveC 语法简介

二、简易项目浏览器搭建

新建项目步骤:

1>

04cfa7e7e6e3

DraggedImage.png

2>

04cfa7e7e6e3

2222.png

3>

04cfa7e7e6e3

33333.png

4>

04cfa7e7e6e3

4444.png

建立一个小的浏览器即webview

关键代码如下:

// context 上下文也可以在此处获取,开始加载网页调用此方法

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

return YES;

}

// 网页加载完成会执行此方法

- (void)webViewDidFinishLoad:(UIWebView *)webView {

self.jsbinding_context = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

[self initBinding];

}

/** 懒加载 */

- (UIWebView *)webView {

if(!_webView) {

_webView = [[UIWebView alloc]init];

_webView.delegate = self;

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];

NSURL* url = [NSURL fileURLWithPath:path];

// NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];

NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];

[_webView loadRequest:request];

}

return _webView;

}

三、js和native交互联调工具认识:

iOS 与 js 交互联调工具必须为safari,首先我们设置一下safari 如下设置调出开发者工具

04cfa7e7e6e3

a'a'a'a.png

04cfa7e7e6e3

bbbbb.png

OK这样我就可以在工具栏中多了一个 【开发】 选项,然后我们编译我们的项目就可以找到相应的网页,跟调试普通网页相同,只是网页现在在手机上

04cfa7e7e6e3

DraggedImage-2-1.png

四、js 与 native 原生交互

1> js 调用oc 方法

a> 用block 的方式

self.jsbinding_context[@"multiply"] = ^(NSInteger a, NSInteger b){

return a * b;

};

b> JSExport 方式

binding类 .h 文件

#import

#import

@protocol JsBindingDemoProtocol

JSExportAs(nativeAdd, - (NSInteger)addX:(NSInteger)x andY:(NSInteger)y);

@end

@interface JsBindingDemo : NSObject

@end

binding类 .m 文件

#import "JsBindingDemo.h"

@implementation JsBindingDemo

- (NSInteger)addX:(NSInteger)x andY:(NSInteger)y {

return x+y;

}

@end

我们要用export 的方式去调用,我们首先要绑定初始化binding类,然后注入到js 中,代码如下:

- (void)initBinding {

JsBindingDemo *binding = [[JsBindingDemo alloc]init];

self.jsbinding_context[@"JsBindingDemo"] = binding;

}

2> native调用js 方法(也有两种方法)

a>context 用上下文执行

- (JSValue *)evaluateScript:(NSString *)script;

eg:执行js中的 native_ execute() 方法

[self.jsbinding_context evaluateScript:@"native_ execute()"];

b>用webview 执行

- (JSValue *)evaluateScript:(NSString *)script withSourceURL:(NSURL *)sourceURL

eg: [self.webview evaluateScript@"native_ execute()" withSourceURL:@"index.js"];

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

eg:[self.webView stringByEvaluatingJavaScriptFromString:@"native_ execute()"];

备注:上面为调用方法代码,导出、注入 属性,步骤与导出、注入方法代码 相同不一一举例说明

五、参考资料:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写给我弟

我堂弟今年24岁,也是我最小的一个堂弟,我想给他说点事,想告诉他一些东西,但是也担心自己所说的,并不能让他认同和接受。我心里一定是有我弟的,也是装着我弟的,所以我弟的事情,我自己…

Chrome插件(扩展)

【干货】Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处。本文所有涉及到的大部分代码均在这个demo里面:https://github.com…

Apache OpenJPA 2.1.0 发布

OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作,让开发者把注意力集中在编写业务逻辑上。OpenJPA 可以作为独立的持久…

手把手带你写一个中断输入设备驱动

今天群里有人问,要开始驱动开发的话从什么开始比较好。我说,应该开始去摸索触摸屏驱动,现在我想了下,触摸屏驱动可能会难了些,但是从一个GPIO开始,我觉得一定是一件很容易的事情。所以这篇文章就来了。大家…

驱动调试神器printk你掌握了吗?

[导读] 刚刚开始做Linux相关开发工作时,深感Linux内核代码庞大,要加些自己的驱动进内核代码树,常常深陷bug的泥沼难以自拔,今天来分享一下内核调试利器printk的使用心得。前面一段时间很忙,后期更文频率会渐渐回归正常…

腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案。目前负责腾讯云中间件产…

二十世纪最伟大的算法,你了解哪个?

导读:作者July总结了一篇关于计算方法的文章《 细数二十世纪最伟大的10大算法 》。一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known …

桌面计算机恢复出厂设置,windows7电脑怎么恢复出厂设置

我们使用电脑一段时间,由于各种问题,希望将电脑恢复出厂设置,那么windows7电脑怎么恢复出厂设置呢?下面跟着学习啦小编来一起了解下windows7电脑恢复出厂设置的方法吧。windows7电脑恢复出厂设置方法一按下开机键,启动…

关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法

今天朋友突然来电话,说自己的Exchange 2010 EMC突然报“you dont have sufficient permissions to view this data”(您的权限不足,无法查看此数据),同时所有的cmdlet命令也不可以执行。询问我解决办法,出错…

内存为什么还有管理?

本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友&…

旧手机别扔,手把手教你DIY一台Linux服务器

作者:Hannah Lee编译:弯月 欧阳姝黎来源:CSDN(ID:CSDNnews)本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机上搭建一台备份服务器。旧手机的污染问题众所周知,我有一台旧…

学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...

GTX1650显卡在2019年4月22日进行发售,不少用户认为GTX1650是智商检测卡,真的是吗?从命名上来看,GTX1650应该是GTX1050的升级产品,不过根据英伟达的说法,GTX1650相比GTX1050提升幅度达到了70%,但…

Gamma的传说

Gamma校正对于图形和图像来说是个常提的概念,但对于gamma的缘由和使用方法,却存在着很多传说。本文将尽可能解析gamma校正来源,破解各种迷思。Gamma校正从何而来 有一种常见的说法,gamma来源于眼睛对光感受。我也曾经错误地采用了…

心急吃不了热豆腐

良好的焊接是保证电路稳定持久工作的前提。下面给出了常见到的焊接缺陷。看看你遇到过多少种?▲ 图1 焊接中的常见问题▲ 图2 锡珠▲ 图3 扰动的焊接:在焊接点冷却过程中焊锡移动,造成焊接表面起雾、结晶、粗糙▲ 图4 立碑▲ 图5 冷结&…

给电子类大学生一点求职建议

‍读大学的时候应该想清楚以后要干嘛,不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会,这个数字多少会给你点压力吧。因为我是专业对口的,所以我就从对口的角度,说下我们电子信息类专业学的啥以及怎么学。有很多人在…

Silverlight三维柱状图3D饼图的Silverlight图表组件案例

Silverlight三维柱状图3D饼图的Silverlight图表组件案例 开发环境:Visual Studio 2010 Silverlight 4 SQL2005 Silverlight开发的3D图表组件与及应用的项目截图: 本Silverlight开发的图表控件程序架构简洁清淅,是做二次开发的良好项目框架和核…

oppo专用计算机,OPPO手机助手

OPPO手机助手是OPPO官方最安全的手机助手,将OPPO手机和电脑连接后,可通过“OPPO手机助手”在电脑上管理手机中的应用程序、短信、通讯录(含通话记录)和图片等,还能在电脑上备份手机中的资料。OPPO手机助手是oppo手机的贴心管家。华军软件园提…

EDG牛逼

不管EDG有多牛,明天的早餐可以加个馒头!EDG🐮🍺

[LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项

这道题我真的纠结好久,因为没注意那个原地的题目要求,所以很奇怪怎么我电脑运行成功,但是LeetCode上运行就是不对。气哭。 感谢群友lino的帮助。他试了set方法不行,直接喂给我的答案了。。。 题目:26. 删除排序数组中的…

IE9给我带来的惊喜和不解(For Silverlight不解)

今天兴致冲冲的装上了IE9,发现IE9装好后不能打开我的Silverlight。提示我需要安装Silverlight插件 如图 后面深蓝色群里得朋友说他们没有这个问题,但是在64位的情况下会有这个问题,我查看了 我的Silverlight是好的,并且重新安装ru…