iOS js oc相互调用(JavaScriptCore)

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

下面我们就简单了解一下这个框架

首先我导入framework

方法如下

点击Linked Frameworks and Libraries 的添加后 选择 JavaScriptCore.framework

选中JavaScriptCore.framework后 点击右下角Add 添加完成

好 创建完成之后我们导入一下头文件

[objc] view plaincopy
  1. #import <JavaScriptCore/JavaScriptCore.h>

点进去 会看到如下几个方法

#import "JSContext.h"

#import "JSValue.h"

#import "JSManagedValue.h"

#import "JSVirtualMachine.h"

#import "JSExport.h"

这些方法我们等会再细讲

下来我们创建一个UIWebView  用来测试

创建UIWebView

[objc] view plaincopy
  1. UIWebView *myWebView;

初始化,添加,打开网址

[objc] view plaincopy
  1. //初始化webview
  2. myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-22)];
  3. myWebView.delegate=self;
  4. //添加webview到当前viewcontroller的view上
  5. [self.view addSubview:myWebView];
  6. //网址
  7. NSString *httpStr=@"https://www.baidu.com";
  8. NSURL *httpUrl=[NSURL URLWithString:httpStr];
  9. NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];
  10. [myWebView loadRequest:httpRequest];

运行效果如下

下面我们来实现UIWebView的几个代理方法

首先我们看下它的代理方法

[objc] view plaincopy
  1. @protocol UIWebViewDelegate <NSObject>
  2. @optional
  3. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
  4. - (void)webViewDidStartLoad:(UIWebView *)webView;
  5. - (void)webViewDidFinishLoad:(UIWebView *)webView;
  6. - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
  7. @end

每个方法的作用等会在带里面做注释

首先我们添加协议

[objc] view plaincopy
  1. @interface ViewController ()<UIWebViewDelegate>

实现代理方法

[objc] view plaincopy
  1. #pragma mark --webViewDelegate
  2. -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
  3. {
  4. //网页加载之前会调用此方法
  5. //retrun YES 表示正常加载网页 返回NO 将停止网页加载
  6. return YES;
  7. }
  8. -(void)webViewDidStartLoad:(UIWebView *)webView
  9. {
  10. //开始加载网页调用此方法
  11. }
  12. -(void)webViewDidFinishLoad:(UIWebView *)webView
  13. {
  14. //网页加载完成调用此方法
  15. }
  16. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
  17. {
  18. //网页加载失败 调用此方法
  19. }

每个方法是什么时候调用都在注释里面

下来我们先尝试用oc调用一下js方法

[objc] view plaincopy
  1. -(void)webViewDidFinishLoad:(UIWebView *)webView
  2. {
  3. //网页加载完成调用此方法
  4. //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)
  5. JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  6. NSString *alertJS=@"alert('test js OC')"; //准备执行的js代码
  7. [context evaluateScript:alertJS];//通过oc方法调用js的alert
  8. }

执行效果如下:

好了,我们已经实现了iOS 调用js

js调用iOS 在下节

http://blog.csdn.net/lwjok2007/article/details/47058795

转载于:https://www.cnblogs.com/shenlaiyaoshi/p/5984747.html

转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js相关推荐

  1. iOS js oc相互调用(JavaScriptCore)(二)

    http://blog.csdn.net/lwjok2007/article/details/47058795 上节地址 http://blog.csdn.net/lwjok2007/article/ ...

  2. iOS js oc相互调用(JavaScriptCore)

    http://blog.csdn.net/lwjok2007/article/details/47058795 转载于:https://www.cnblogs.com/wlsxmhz/p/564598 ...

  3. iOS中JS 与OC的交互(JavaScriptCore.framework)

    iOS中实现js与oc的交互,目前网上也有不少流行的开源解决方案: 如:react native 当然一些轻量级的任务使用系统提供的UIWebView 以及JavaScriptCore.framewo ...

  4. iOS插件化研究之一——JavaScriptCore

    原文:http://chentoo.com/?p=191 一.前言 一样的开篇问题,为什么要研究这个?iOS为什么要插件化?为什么要借助其他语言比如html5 js甚至脚本lua等来实现原本OC/Sw ...

  5. ios传值给js_深入剖析 iOS 与 JS 交互

    前言 Web 页面中的 JS 与 iOS Native 如何交互是每个 iOS 猿必须掌握的技能.而说到 Native 与 JS 交互,就不得不提一嘴 Hybrid. Hybrid 的翻译结果并不是很 ...

  6. js与c语言互相调用,Objc与JS间相互调用

    过去3.4年都在进行跨平台的混合应用开发,但一直没有系统梳理跨平台技术的底层原理,趁新工作未正式入职,这里整理一下. 跨平台的一种实现是基于webview.所谓webview,实质是在原生app中打开 ...

  7. ios 使用webview 查找_iOS开发WKWebView与JS的交互

    iOS8以后,Apple公司推出了WKWebView,对比之前的UIWebView不论是处理速度还是内存性能,都有了大幅度的提升! 那么下面我就分享一下WKWebView与JS的交互. 首先使用WKW ...

  8. iOS战记 ----OC基础语法之战(一)

    iOS战记  ----OC基础语法之战(一) 一个机械设计者的转行之战. 火车一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面 ...

  9. IOS的OC项目下回调函数的定义以及传参

    IOS的OC项目下回调函数的定义以及传参 1.首先定义一个类方法,通过类名打点调,没有返回值的, +(void) 2. 起个函数名字 +(void)headLineWithSuccess , head ...

最新文章

  1. PostgreSQL运维实战精讲之“postgresql源码安装”
  2. 京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒
  3. 使用Intellij IDEA 14.0.2 编译项目耗时特别长的问题
  4. oracle java数据类型转换函数_Oracle基础——单行函数(类型转换函数)
  5. Linux 搜索指令
  6. iOS Safari 中click点击事件失效的解决办法
  7. 一位经验丰富的程序员如何建立网络初创企业?
  8. Windows Azure Cloud Service (17) Role Endpoint
  9. 还在犹豫是否迁移.NET5?这几个项目已经上线了!
  10. 剑与轮回找回服务器,剑与轮回自由之都1服开服时间表_剑与轮回新区开服预告_第一手游网手游开服表...
  11. Linux Shell命令能力倾向问题和解答
  12. 前端 如何检测到当前的网页已经退出_javascript在当前窗口关闭前检测窗口是否关闭...
  13. 现在的计算机电源都要经过,电脑待机后必须关闭电源才能开启
  14. 五个部署Hyper-v的常见错误.
  15. 线段树线段树的创建线段树的查询单节点更新区间更新
  16. PTA 1003 Emergency
  17. 新版vip在线解析html源码
  18. HTML5CSS3网页设计仿微信通讯录页
  19. java calendar 时分秒_java 时间处理类Calendar获取年月日时分秒毫秒的方法实例
  20. 电脑屏幕保护推荐——Fliqlo

热门文章

  1. matlab 2010无法运行程序,matalb r2010a安装后打开出现一系列警告,无法运行,哪位大神帮...
  2. sqlmap使用_sqlmap从入门到精通第四章47使用EW代理导出和导入MSSQL数据
  3. noip复赛普及组2020_我校学子在2020年“外研社·国才杯”全国英语写作大赛(高职组)复赛中斩获佳绩...
  4. Java每日一讲讲什么好_撩课-Java每天10道面试题第1天
  5. layer弹出层闪退_layer弹出层详解
  6. html页面显示用户在线统计,在HTML页面中实现点击数统计
  7. c语言表示哥德巴赫猜想,用C语言来验证哥德巴赫猜想(定义的是int型)
  8. c语言求跳水运动员成绩,跳水排名_C语言编程实例_C语言_最全面的网站教程
  9. linux文件描述符与标识符,文件描述符fd
  10. c++ gdb 绑定源码_【Vue原理】VNode 源码版