转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。
下面我们就简单了解一下这个框架
首先我导入framework
方法如下
点击Linked Frameworks and Libraries 的添加后 选择 JavaScriptCore.framework
选中JavaScriptCore.framework后 点击右下角Add 添加完成
好 创建完成之后我们导入一下头文件
- #import <JavaScriptCore/JavaScriptCore.h>
 
点进去 会看到如下几个方法
#import "JSContext.h"
#import "JSValue.h"
#import "JSManagedValue.h"
#import "JSVirtualMachine.h"
#import "JSExport.h"
这些方法我们等会再细讲
下来我们创建一个UIWebView 用来测试
创建UIWebView
- UIWebView *myWebView;
 
初始化,添加,打开网址
- //初始化webview
 - myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-22)];
 - myWebView.delegate=self;
 - //添加webview到当前viewcontroller的view上
 - [self.view addSubview:myWebView];
 - //网址
 - NSString *httpStr=@"https://www.baidu.com";
 - NSURL *httpUrl=[NSURL URLWithString:httpStr];
 - NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];
 - [myWebView loadRequest:httpRequest];
 
运行效果如下
下面我们来实现UIWebView的几个代理方法
首先我们看下它的代理方法
- @protocol UIWebViewDelegate <NSObject>
 - @optional
 - - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
 - - (void)webViewDidStartLoad:(UIWebView *)webView;
 - - (void)webViewDidFinishLoad:(UIWebView *)webView;
 - - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
 - @end
 
每个方法的作用等会在带里面做注释
首先我们添加协议
- @interface ViewController ()<UIWebViewDelegate>
 
实现代理方法
- #pragma mark --webViewDelegate
 - -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
 - {
 - //网页加载之前会调用此方法
 - //retrun YES 表示正常加载网页 返回NO 将停止网页加载
 - return YES;
 - }
 - -(void)webViewDidStartLoad:(UIWebView *)webView
 - {
 - //开始加载网页调用此方法
 - }
 - -(void)webViewDidFinishLoad:(UIWebView *)webView
 - {
 - //网页加载完成调用此方法
 - }
 - -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
 - {
 - //网页加载失败 调用此方法
 - }
 
每个方法是什么时候调用都在注释里面
下来我们先尝试用oc调用一下js方法
- -(void)webViewDidFinishLoad:(UIWebView *)webView
 - {
 - //网页加载完成调用此方法
 - //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)
 - JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
 - NSString *alertJS=@"alert('test js OC')"; //准备执行的js代码
 - [context evaluateScript:alertJS];//通过oc方法调用js的alert
 - }
 
执行效果如下:
好了,我们已经实现了iOS 调用js
js调用iOS 在下节
转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js的更多相关文章
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS  ---js里面直接调用方法
		
OS js oc相互调用(JavaScriptCore) 接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...
 - iOS js oc相互调用(JavaScriptCore)(二)
		
下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用方法 首先我们看第一种,直接调用方法. 其中用到了iOS的block 上代码 -(void)we ...
 - iOS js oc相互调用(JavaScriptCore 下)
		
下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用方法 首先我们看第一种,直接调用方法. 其中用到了iOS的block 上代码 -(void)we ...
 - iOS js oc相互调用JavaScriptCore(一)
		
原址:http://blog.csdn.net/lwjok2007/article/details/47058101 1.普通调用 从iOS7开始 苹果公布了JavaScriptCore.framew ...
 - iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法
		
下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...
 - iOS js oc相互调用(JavaScriptCore)
		
http://blog.csdn.net/lwjok2007/article/details/47058795
 - 转载     【iOS开发】网页JS与OC交互(JavaScriptCore)    OC ----->JS
		
目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...
 - iOS中JS 与OC的交互(JavaScriptCore.framework)
		
iOS中实现js与oc的交互,目前网上也有不少流行的开源解决方案: 如:react native 当然一些轻量级的任务使用系统提供的UIWebView 以及JavaScriptCore.framewo ...
 - iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法
		
ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...
 
随机推荐
- linux mysql cluser集群
			
管理节点的安装与启动 config.init内容如下 [NDBD DEFAULT] NoOfReplicas=1 #定义在Cluster环境中相同数据的份数,最大为4 [NDB_MGMD] #设置管理 ...
 - ASIHTTPRequest学习(三)
			
刚刚开始学习ASIHttpRequest,今天通过自己写的一个小demo分享一下学习心得. 首先,要想在ios项目中使用ASIHttpRequest,必须添加下列框架和类库: ASIHttpReque ...
 - 安装php扩展模块参数memcache和memcached在php中的应用
			
一, memcache和memcached的区别与关系统php要想去访问memcached就得需要memcache扩展,这个道理和php连接mysql一样. 你不安装memcache扩展就没法识别me ...
 - ylb: 数据库操作方法基础
			
ylbtech-SQL Server:SQL Server-数据库操作方法基础 数据库操作方法基础. ylb: 数据库操作方法基础 返回顶部 ----------试图操作(view)--------- ...
 - UI_UITableView_搭建
			
创建 tableView UITableViewStyle 有两种选择 #pragma mark - 创建 tableView - (void)createTableView { // 枚举类型共同拥 ...
 - Angular 学习笔记——$interpolate
			
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
 - 使用UI Automation实现自动化测试--2
			
1. 首先建立一个待测试的winform程序,即UI Automation的服务端. 下面是button事件处理程序. private void CalculateButton_Click(objec ...
 - linux生成指定大小的文件(转)
			
# dd if=/dev/zero of=50M.file bs=1M count=50在当前目录下生成一个50M的文件 虚拟块设备文件更通用的名称是硬盘镜像文件(Hard Disk Image),但 ...
 - oracle字符串处理相关
			
函数 返回 描述 例子 to_char(timestamp, text) text 把 timestamp 转换成 string to_char(timestamp 'now','HH12:MI:SS ...
 - mngoDB 常用语法
			
http://topmanopensource.iteye.com/blog/1278812### 连接写法:[IP地址:端口号] mongo 192.168.1.161:27017; show db ...