UIWebView js oc相互调用的三种方法

iOS和html交互:html调用oc方法 html端调用oc端方法,比如网页端需要支付,但只有oc才能调起支付宝或微信支付,可以这样写: OC端: 引入库        #import <JavaScriptCore/JavaScriptCore.h> 设置代理         @protocol JSObjectProtocol <JSExport>         - (void)callIosPayF... 阅读详情


转自:http://www.jianshu.com/p/dbddfc0eaa26


JS oc相互调用方法:

 1.利用定义url调用
 2.利用js直接调用
 3.利用js里对象调用

首先先创建UIWebView对象,加载本地html文件

//加载本地html文件
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"jsbridge" ofType:@"html"];
//NSString *htmlPath1 = [[NSBundle mainBundle]  pathForResource:@"jsbridge" ofType:@"html"];
//NSString *htmlPath2 = [[NSBundle mainBundle] pathForResource:@"jsbridge" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
_webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[_webView loadHTMLString:htmlString baseURL:nil];
_webView.delegate = self;
[self.view addSubview:_webView];

实现UIWebViewDelegate

 //网页是否要加载
 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
//网页开始加载
- (void)webViewDidStartLoad:(UIWebView *)webView
//网页加载完成
- (void)webViewDidFinishLoad:(UIWebView *)webView
//网页加载失败
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error
1.利用定义url调用
js 调用oc:

定义js方法,点击网页上的按钮触发js方法,重定向url,UIWebViewd的代理方法触发


屏幕快照 2016-05-03 下午3.14.25.png


判断定义好的scheme,获取url传过来的值


屏幕快照 2016-05-03 下午3.19.05.png
oc 调用js:
NSString *textJS = @"showAlert('这里是JS中alert弹出的message 第一种方式')";
[_webView stringByEvaluatingJavaScriptFromString:textJS];
2.利用js直接调用

使用第二种和第三种方式时需要加入JavaScriptCore.framework,如果项目要求支持ios7.0之前的需要做兼容
从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。
首先导入JavaScriptCore.framework


20150725170931474.png

然后导入头文件

#import <JavaScriptCore/JavaScriptCore.h>

更换加载的html文件


屏幕快照 2016-05-03 下午3.34.10.png


web中的js方法


屏幕快照 2016-05-03 下午3.37.36.png

点击web中按钮,通过JScontext直接调用share方法,从JSValue中取值


屏幕快照 2016-05-03 下午3.35.26.png
oc 调用js:
 JSContext *context = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
 //oc 调用 js
 NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";
[context evaluateScript:textJS];
3.利用js里对象调用

此处稍微复杂一点我们需要使用到

JSExport

凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通过js调用到

首先在html中创建对象,定义方法


屏幕快照 2016-05-03 下午3.44.27.png
 无参方法
 TestJSobject.TestNOParameter();
 有一个参数的方法
 TestJSobject.TestOneParameter(TestJSobject.name);
  有两个参数的方法          
TestJSobject.TestTwoParameterSecondParameter(TestJSobject.name,TestJSobject.age);
创建oc类,添加协议

屏幕快照 2016-05-03 下午3.47.46.png


实现协议方法


屏幕快照 2016-05-03 下午3.48.01.png

特别注意:

如果js中的参数超过两个,oc中方法名需要分开

js中的方法TestJSobject.TestTwoParameterSecondParameter(TestJSobject.name,TestJSobject.age);oc中的方法-(void)TestTwoParameter:(NSString *)message1 SecondParameter:(NSString *)message2

  //js对象调用,创建对象
JSContext *context = [webView    valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
TestJSobject *test = [TestJSobject new];
 context[@"TestJSobject"] = test;
oc 调用js:
 //同样我们也用刚才的方式模拟一下js调用方法
 NSString *jsStr1=@"TestJSobject.TestNOParameter()";
[context evaluateScript:jsStr1];

点击web中的按钮,oc中的协议方法被触发


屏幕快照 2016-05-03 下午4.05.06.png

屏幕快照 2016-05-03 下午4.05.10.png

总结:根据以上几种方法,个人感觉第三种方法能更好的和oc相关联起来,而且还避免了viewController中过于庞大,如果方法多的时候。



文/跑步的李磊(简书作者)
原文链接:http://www.jianshu.com/p/dbddfc0eaa26
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS UIWebView和WKWebView的JS调用详解 一般应用开发,用到webview和JS交互的地方特别多,当然也有很多优秀的第三方可以使用,例如:WebViewJavascriptBridge,有兴趣的可以研究下,非常好用的一个框架,本文主要概括下苹果提供的原声控件和JS互相简单调用。webview以及WKWebView。      iOS8.0之前,苹果只提供UIwebview一个控件,这个控件JS调用OC主要通过UIwebview的代理方法 阅读详情

相关推荐

iOS webView的高级用法之JS交互,js与oc的相互调用(JavaScriptCore)

重要的事情放前面 github地址:https://github.com/horisea/JSCallOCTest   欢迎star   前言:说起JS交互,很多童鞋会黯然色变,感觉很高深的样子。大部分小伙伴只知道一种,哪一种我也说说吧。    1.在webView中将要请求的时候,拦截URL,进行重定向,然而该场景实用有限,网上资料也很多下面说说另一种交互方式。 - (BOOL)webV...

horisea的博客 2万+

JS与OC互相调用的一百种方法(包括WKWebView和UIWebView)

首先,UP主要承认错误,JS调用OC并没有一百种那么多~但是,也是有很多种办法的,起码我们可以花样使用。好了,废话不多说,下面开始逐一介绍。。。 一、简单介绍 JSCore全称为JavaScriptCore,是苹果公司在iOS中加入的一个新的framework。该framework为OC与JS代码相互操作的提供了极大的便利。该工程默认是没有导入工程中的,需要我们手动添加。

kidd风的博客 1万+

JS与原生OC/Swift相互调用总结

JS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式:1.使用UIWebView,利用JavaScriptCore实现2.使用WKWebView,利用WKScriptMessageHandler实现3.使用第三方框架WebViewJavascriptBridge实现案例地址:https://github.com/xinyuly/JS_OC_SwiftJavaScriptCore在Sw...

jacob_ios的博客 1554

javascript调用OC原生方法

【代码】javascript调用OC原生方法。

carbonzhao的专栏 443

JS调用OC代码

JS 虽然是 OO,但是并没有 class,所以将 JS 对象传到 Obj C 程序里头,除了基本字串会转换成 NSString、基本数字会转成 NSNumber,像是 Array 等其他对象,在 Objective-C 中,都是 WebScriptObject 这个 Class。意思就是,JS 的 Array 不会帮你转换成 NSArray。

ERA5 hourly data批量下载与cdo处理(一)

本篇文章主要介绍了ERA数据的批量下载

qq_40511689的博客 3872

IOS开发之——网页-原生与JS相互调用(03)

一 概述 之前介绍过——Android原生和WebView相互调用,本文介绍IOS原生和JS相互调用 加载本地网页文件 原生调用JS JS调用原生 二 加载本地网页文件 2.1 index.html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>demo</title> <style>

我的博客 3824

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 303

iOS js oc相互调用(JavaScriptCore)

从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。 下面我们就简单了解一下这个框架 首先我导入framework 方法如下 点击Linked Frameworks and Libraries 的添加后 选择 JavaScriptCore.framework 选中JavaScriptCore

7万+

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

Win11系统重装全记录:从备份Office激活到搞定RAID阵列,我的微星笔记本复活记

本文详细记录了Win11系统重装的完整过程,从数据备份到RAID阵列配置,特别针对微星笔记本的特殊硬件驱动问题提供了解决方案。文章涵盖了Office激活状态备份、BIOS设置、驱动安装顺序等关键步骤,帮助用户顺利完成系统重装并优化性能。

weixin_31421613的博客 309

js页面加载完成调用oc_js oc相互调用的三种方法

JS oc相互调用方法:1.利用定义url调用2.利用js直接调用3.利用js里对象调用首先先创建UIWebView对象,加载本地html文件//加载本地html文件NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"jsbridge" ofType:@"html"];//NSString *htmlPath1 = [[NSB...

weixin_32659841的博客 652

EBS开发_离散工单创建API

--以下代码于20171213在TONY环境中实现 DECLARE     l_iface_rec    wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表     l_group_id     NUMBER;     l_returnstatus VARCHAR2(40);     l_errormsg     VARCHAR2(2000

蜗牛先生快跑的博客 2596

iOS JS与OC交互

iOS JS与OC交互 1、UIWebView 与 JS 交互 UIWebView 在 iOS12 中已经被废弃,同时WKWebView在iOS8中已经出现。所以无特殊情况的话,我们一般应该也是用不到前者了! UIWebView 初始化: self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; self.webView.delegate = self; [self.view addSubview:self.

kangpp的博客 2978

RK3588开发笔记-USB3.0接口调试

RK3588平台是一款强大的处理器,但要充分发挥其性能,需要正确调试其各种接口,包括USB 3.0接口。USB 3.0接口提供了更快的数据传输速度,但也可能面临一些问题。本篇博客将介绍如何在RK3588平台上调试USB 3.0接口,以确保其稳定性和性能。RK3588芯片具有强大的USB资源,包括多个USB接口和高速数据传输能力。RK3588通常具有多个USB接口,包括USB 2.0和USB 3.0。USB 2.0用于低速和全速设备连接,而USB 3.0则用于高速设备连接。

flypig has a dream! 2560

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 344

IOS WebView中JS和OC相互调用

现在有很多项目中都涉及到HTML5,在一个普通的APP里面嵌入HTML5网页,嵌入的这些网页在服务器把页面修改之后同样也能跟着修改,这样就能很方便的修改程序的展示内容。如果使用tabelView或者其他的控件展示内容的话,当展示的内容的样式需要发生改变的时候必须修改程序本身才能够达到修改的效果。所以,在APP里面HTML5的嵌入可以更加方便的维护程序的内容,但是由于现在受网速啊,手机性能等因素的影响

清风的博客 5313

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

iOS开发 --- UIWebView OC调用JS方法

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.navigationItem.title = @"活动详情页面"; self.backButton.frame = CGRectMake(0, 0, 66, 44...

iOS技术分享与学习博客 590

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS JS 和 OC交互 / JS 和 native 相互调用

现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native OC代码 第一种机制 (1)最常用的是 利用 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)reques...

weixin_34250434的博客 723

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

UIWebView与JS的交互

UIWebView与JS的交互,说白了就是Objective-C和JavaScript的相互调用。Objective-C调用JavaScript代码的方法,是通过UIWebView的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法来实现的。该方法向UIWebView传递一段需要执行的JavaScr

Panwave的专栏 1454

UIWebView 获取当前的javascript上下文,并js,oc互调

OC调用UIWebView 中的js,网上例子很多,最常用的是UIWebView自带的一个方法; - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script; UIWebView中的js 掉用本地的oc方法; 通过UIWebView开始加载请求的代理方法中,去解析OC跟js约定好的协议(比如...

anxing1070的博客 180

iOS UIWebView中JS和OC互相调用

最近做的项目中,是用html做的,我这边直接用iOS原生的UIWebView进行加载显示,在期间用到了js和OC的互相调用,这里记录下来      JS调用OC方法:         首先,什么是JS调用OC方法,意思就是界面上有一个html的按钮,我点击这个按钮之后,要调用OC原声的方法,这就是JS调用OC方法。我们项目里面有一个点击注销按钮返回原生登陆界面的例子 先impot

crypond的专栏 5541

iOS的JS和OC代码互相调用

1.JS调用OC代码 步骤1:以下是html页面,test1函数,并没有在页面中声明,而是在OC的UIWebView中绑定的             //test2(p)函数是准备 OC调用JS函数用的         function test2(p){             alert(p);         }         test1()" onc

VictorZhang 3258

iOS中OC调用js方法简述(一)

从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。

Levilly的博客 8256

UIWebview JS和OC相互调用

OS开发之Objective-C与JavaScript交互操作是本文要介绍的内容,主要主要是讲解了stringByEvaluatingJavaScriptFromString的用法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素。UIWebView是iOS最常用的8SDK之一,它有一个stringByEvaluatingJavaScriptFromStr

li198847的博客 427
上一篇: iphone 6plus 输出的屏幕尺寸 375 ,667的原因 - 简书
下一篇: C++ 异常处理(廿五)--abort()
Gz_Jason_chen
博客等级 码龄11年 49粉丝 141原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值