文档章节

iOS之路21-JS与OC交互

Eric-osc
 Eric-osc
发布于 2016/02/28 17:18
字数 381
阅读 64
收藏 4

一: OC执行JS代码

1.webView加载请求, request, 控制器成为webView的代理, 监听网页加载完毕会调用代理方法

/**

 *  网页加载完毕
 */

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

2.让页面调用OC的方法, 它属于webView的方法,注意: 执行JS代码仅仅只有这一种方法:

[webView stringByEvaluatingJavaScriptFromString:@“JS代码];


举例 一:

/**
 * 
网页加载完毕
 */

- (
void)webViewDidFinishLoad:(UIWebView *)webView
{
   
NSString *js = @"document.getElementsByTagName('footer')[0].remove();";
    [webView
stringByEvaluatingJavaScriptFromString:js];
}

举例 二:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
   
NSString *JS代码 = @"function login (username, pwd) {  "
                   
"   return 10;"
                   
"       }"
                   
"   login();";
   //     OC中调用JS的函数(执行JS代码)
   [webView stringByEvaluatingJavaScriptFromString:
@“JS代码];

}


二: JS调用OC代码, JS调用OC中的方法

1.需要自定义href协议, 可以指定方法名和参数: 然后将OC方法和参数值拼接在一个URL中

/*  通用url的设计
    1>
协议固定: hm:
    2>
一般有2个参数  2.1> 方法名  2.2> 方法参数

*/

window.location.href = 'hm:saveImageToAblum:&' + this.src

2.使用 <UIWebViewDelegate>代理方法拦截请求, 每发送请求之前系统会自动调用该代理方法:

/**
   
调用 : 每当webView发送一个请求之前都会先调用这个方法
    request :
即将发送的请求
    BOOL : Yes :
允许发送这个请求  No : 禁止发送这个请求
    navigationType :
是否在新窗口中打开

 */

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//        a) 在这个代理方法中拦截JS请求的URL
//        b) URL中截取相应的方法名和参数
//        c) 调用方法,传递参数

return YES/NO;

}


© 著作权归作者所有

共有 人打赏支持
Eric-osc
粉丝 4
博文 23
码字总数 7046
作品 0
东城
私信 提问
iOS与JS交互之UIWebView-JSExport协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JSExport」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前端(不...

QiShare
2018/08/31
0
0
iOS WebView和JS的交互

前言 现在web前端发展越来越快,为了追求应用的快速开发和迭代,许多产品都会选择混合开发,在手机端嵌入web页面,那么这就会导致一个问题, 原生代码怎么和js交互?那么下边我们共同学习一下...

小猿_Luck_Boy
2018/05/17
0
0
JS与OC-WebView交互总结

OC与JS交互有两种方式,WKWebView和UIWebView,由于UIWebView比较耗内存,性能上不太好,所以苹果在iOS 8中推出了WKWebView。 一、与UIWebView交互 在UIWebView与JS交互中最简单的办法就是拦截...

乔兰伊雪
2018/05/29
0
0
iOS与JS交互之UIWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「UIWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/08/28
0
0
iOS与JS交互之WKWebView-WKScriptMessageHandler协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKJSMessageHandler」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Neo 虚拟机

上一篇《Neo 编译器》中说明了Neo编译器是怎么把CIL转成neo虚拟机的opcode,那么vm虚拟机又是怎么处理这些代码的,这篇文章我们看一下虚拟机的代码。 框架 虚拟机所处的位置 在框架图中,我们...

NEO-FANS
25分钟前
1
0
TiDB-Lightning Toolset & TiDB-DM 正式开源,前排开“坑”、PR 走起!

在刚刚结束的 TiDB DevCon 2019 上,我们宣布将大家期待已久的 TiDB-Ligthning Toolset 和 TiDB-DM 开源(惊不惊喜、意不意外?!),感兴趣的小伙伴们赶紧前排关注一波,开“坑(issues)”...

TiDB
39分钟前
2
0
人人都可以做深度学习应用:入门篇

本文由云+社区发表 作者:徐汉彬 一、人工智能和新科技革命 2017年围棋界发生了一件比较重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现在我们...

腾讯云加社区
43分钟前
1
0
C++ RAII

C++ RAII RAII是resource acquisition is initialization的缩写,意为“资源获取即初始化”。它是C++之父Bjarne Stroustrup提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获...

mskk
46分钟前
1
0
web.xml is missing and is set to true一步解决

次报错说的是在WebContent/WEB-INF下面没有web.xml,而默认web.xml不在此路径,需要重新指定路径,操作如下: 先取消Dynamic Web Module勾选,点击apply,然后再勾上Dynamic Web Module,此时...

宇昕
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部