OC调用UIWebView 中的js,网上例子很多,最常用的是UIWebView自带的一个方法;

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

UIWebView 中的js 掉用本地的oc方法;

通过UIWebView开始加载请求的代理方法中,去解析OC跟js约定好的协议(比如约定协议objtc://)

比如<a href="objtc://function">调用oc</a>

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

  NSString *urlString = [[request URL] absoluteString];

  if( [urlString hasPrefix:@"objtc://"] ){

    //调用oc本地方法

    NSLog(@"....");

  }

}

第二种方法,比如OC类A中有个UIWebView,UIWebView的js想调用OC类A中的方法,

对于JSContext,JSValue跟OC对象的相互转换,获取js的window文档树,或者其他交互功能,百度很多

1)新建一个协议继承JSExport

#import <JavaScriptCore/JavaScriptCore.h>

#import "objc/runtime.h"

@protocol LLCExport <JSExport>

//UIWebView中的js,就可以通过appPushPageTitle(url,title)调用此协议的这个方法

-(void)appPushPage:(NSString*)url title:(NSString*)title;

@end

2)获取类A 的当前UIWebView中的上下文对象JSContext,

self.jsc = [self.webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

3)类A 实现 LLCExport中的方法

-(void)appPushPage:(NSString*)url title:(NSString*)title{

UIViewController *pvc = [[UIViewController alloc] init];

pvc.title = title;

pvc.strUrl = url;

[self.navigationController pushViewController:pvc animated:YES];

}

4)当UIWebView加载完毕后,给类A动态加自定义的LLCExport协议,然后把类A对象赋值给JSContext中自定义的“APP_NATIVE”对象

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

  class_addProtocol(self.class,@protocol(LLCExport));

  self.jsc["APP_NATIVE"] = self;

}

5)js里面就可以通过window.APP_NATIVE.appPushPageTitle("http://www.baidu.com","百度");

来调用OC类A中的-(void)appPushPage:(NSString*)url title:(NSString*)title;这个方法了

UIWebView 获取当前的javascript上下文,并js,oc互调的更多相关文章

  1. IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)

    一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...

  2. javaScript系列:js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

  3. 【repost】图解Javascript上下文与作用域

    本文尝试阐述Javascript中的上下文与作用域背后的机制,主要涉及到执行上下文(execution context).作用域链(scope chain).闭包(closure).this等概念. ...

  4. JavaScript best practices JS最佳实践

    JavaScript best practices JS最佳实践 0 简介 最佳实践起初比较棘手,但最终会让你发现这是非常明智之举. 1.合理命名方法及变量名,简洁且可读 var someItem = ...

  5. Hybrid App: 对比UIWebView和WebKit实现JavaScript与Native交互

    一.简介 在前面一篇文章中讲到过实现JavaScript与Native交互的方式有一种就是使用原生内嵌webView.在iOS8之前,开发者只能使用苹果提供的UIWebView类来加载URL或者HTM ...

  6. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  7. 转:web前端面试题合集 (Javascript相关)(js异步加载详解)

    1. HTTP协议的状态消息都有哪些? 1**:请求收到,继续处理2**:操作成功收到,分析.接受3**:完成此请求必须进一步处理4**:请求包含一个错误语法或不能完成5**:服务器执行一个完全有效请 ...

  8. javascript中外部js文件取得自身完整路径得办法

    原文:javascript中外部js文件取得自身完整路径得办法 有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也 ...

  9. JavaScript进阶(九)JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

随机推荐

  1. JBPM4之decision节点:1、好学生 | 坏学生

    JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件 JBPM4入门——3.JBPM4开发环境的搭建 JBPM4入门—— ...

  2. 深入浅出ghostbuster剖析NodeJS与PhantomJS的通讯机制

    深入浅出ghostbuster剖析NodeJS与PhantomJS的通讯机制 蔡建良 2013-11-14 一. 让我们开始吧 通过命令行来执行 1) 进行命令窗口: cmd 2) 进入resourc ...

  3. PHP中超全局变量$GLOBALS和global的区别

    一.超全局变量$GLOBALS PHP超全局变量有很多,如下的都属于超全局变量(Superglobal): $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKI ...

  4. mysql 1130 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server

    mysql -u root -p  mysql;use mysql;  mysql;select 'host' from user where user='root';  mysql;update u ...

  5. Android Application 深入分析

    http://blog.csdn.net/rain_butterfly/article/details/37598939

  6. android技巧:EditText输入错误时该怎样提示用户

    验证用户输入内容(EditText)应该及时准确的告诉用户,那么在Android系统中提示用户通常有以下做法: 1) 使用Toast提示 1 Toast.makeText(this, "邮箱 ...

  7. Nginx - Windows下Nginx基本安装和配置

    Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定.性能更好,而且配置简单,资源占用较低. 1. 安装 Nginx ...

  8. OFBIZ+ECLIPSE

    1. 首先要安装好OFBIZ,参考<OFBIZ安装>. 2. 安装ECLIPSE. 3. 安装FreeMarker插件,这是OFBIZ的模版引擎.在"Eclipse Market ...

  9. Oracle锁表(转载)

    锁定类型               行级锁               表级锁行级锁         ---- 行被排他锁定         ----在某行的锁被释放之前,其他用户不能修改此行    ...

  10. 使用LabVIEW如何生成应用程序(exe)和安装程序(installer)

    主要软件:   LabVIEW Development Systems>>LabVIEW Professional Development System主要软件版本:   2012主要软件 ...