现在APP的开发已经不局限于原生开发,很多都是原生+html5这种混合开发

我们可以通过webView这个控件,实现混合开发。

1.首先你需要创建一个html页面

<html>
<head>
<meta charset="utf-8">
<title>第一个页面</title>
</head> <script>
function login() {
location.href = 'ddz://call_?200';
}
</script> <body>
<button style="background: blue; width:100px; height:30px" onclick="login()">确定</button>
<br>
<a href="http://www.baidu.com">百度</a>
</body>
</html>

在app初始化时,加载这个页面

- (void)viewDidLoad {
[super viewDidLoad]; [self.webView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]]];
}

2.实现UIWebViewDelegate这个协议

利用stringByEvaluationgJavaScriptFromString这个协议方法,

可以完成OC调用JS

#pragma mark - <UIWebViewDelegate>
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"alert(100)"];
}

3.

利用shouldStartLoadWithRequest这个方法可以完成JS调用OC

/**
* 通过这个方法完成JS调用OC
* 第三方框架 :WebViewJavaScriptBridge
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { //url = ddz://sendMessage_?200
NSString *url = request.URL.absoluteString;
NSString *scheme = @"ddz://";
if ([url hasPrefix:@"ddz://"]) {
NSLog(@"调用OC的方法"); //获得协议后面的路径 path = sendMessage_?200
NSString *path = [url substringFromIndex:scheme.length];
//利用?进行切割
NSArray *subpaths = [path componentsSeparatedByString:@"?"];
//方法名 methodName = sendMessage:
NSString *methodName = [[subpaths firstObject] stringByReplacingOccurrencesOfString:@"_" withString:@":"];
//参数 params = 200
NSString *params = [subpaths lastObject]; [self performSelector:NSSelectorFromString(methodName) withObject:params];
// NSLog(@"%@",subpaths);
return NO;
} NSLog(@"想加载其他请求,不是想调用OC的方法"); return YES;
}

4.

在github上也找到了一个 oc 和 js 之间能够交互的类,可以看一下 https://github.com/marcuswestin/WebViewJavascriptBridge

OC与JS的交互的更多相关文章

  1. OC与JS的交互(iOS与H5混编)

    大神总结WKWebView的坑:https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA 在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景. iO ...

  2. [转]OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  3. OC和JS的交互---JavaScriptCore

    JavaScriptCore的简单介绍 JavaScriptCore是iOS7提供的原生框架,可以让Objective-C和JavaScript提供简单直接的交互. JavaScriptCore的使用 ...

  4. iOS OC与JS的交互(JavaScriptCore实现)

    本文包括JS调用OC方法并传值,OC调用JS方法并传值 本来想把html放进服务器里面,然后访问,但是觉得如果html在本地加载更有助于理解,特把html放进项目里 HTML代码 <!DOCTY ...

  5. OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  6. iOS OC和JS的交互 javaScriptCore方法封装

    一.javaScriptCore javaScriptCore是一种JavaScript引擎,主要为webKit提供脚本处理能力,javaScriptCore是开源webkit的一部分,他提供了强大的 ...

  7. 实现OC与JS的交互

        oc-->js stringByEvaluatingJavaScriptFromString,其参数是一NSString 字符串内容是js代码(这又可以是一个js函数.一句js代码或他们 ...

  8. OC和JS的交互

    1.引入类拓展UIWebView+TS_JavaScriptContext, 这个类拓展是能在JSCotext出现的时候就可以拿到. 因为一般情况下JSCotext在webViewDidFinishL ...

  9. OC和JS之间的交互

    OC和JS之间的交互 目录 对OC和JS之间交互的理解 JS调用OC OC调用JS 对OC和JS之间交互的理解 JS调用OC JS文件 function sendCommand(cmd,param){ ...

随机推荐

  1. Fundamentals of MVC

     Chapter 1 Fundamentals of MVC    Microsoft's Web Development Platforms Understanding the past can b ...

  2. .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

  3. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2)

    在 DependencyInjection项目代码分析4-微软的实现(1)中介绍了“ServiceTable”.“ServiceEntry”.“IGenericService”.“IService”. ...

  4. 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能

    在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...

  5. SQL Server存储过程多角度介绍

    什么是存储过程: 存储过程(Procedure)类似于C#语言中的方法,它是SQL语句和控制流语句的预编译集合.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.逻辑控制语句 ...

  6. 关于在Servelet中如何获取当前时间的操作

    //获取到当前时间 Date date=new Date(); DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss&quo ...

  7. 钉钉服务器端SDK PHP版

    项目地址: https://github.com/web3d/DingtalkSDK.git 钉钉官方有些简单的demo,但封装得有些粗糙. 开发的过程中,做了一个有点小意思的工具:json数据转换为 ...

  8. X3D中Profile如何翻译

    问题在哪 在计算机术语中,Profile其实是很难用中文对应的词汇来翻译的一个单词. 在X3D国际标准中,就出现了Profile.它把软件产品对X3D的功能实现范围和相应支持程度做了预先的约定,分为C ...

  9. DokuWiki整合Zentao的用户授权及分组体系

    老外们把精力都放在了怎样做通用性上面了. Doku后台有切换授权方式的选项,改成mysql. 注:如下修改mysql.conf.php后,要把分组和权限设置结合起来,还需要配置dokuwiki的分组, ...

  10. 良好Web系统架构的几个因素

    好像以前整理过一些思路. 这里的架构不是指纵向的架构,而是横向的架构方面. 三个词:挂件化.模块化.钩子化.