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. JSTL标签用法 详解

    在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JST ...

  2. 【javascript】js 判断微信浏览器

    上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下载此 apk.然后就发生了问题,经过测试,发现用微信扫一扫打 ...

  3. 热门Web开发方式 REST实现原理浅析

    REST 首先只是一种架构样式,不是一种标准.这点和 Ajax 类似,两者都是利用现有的成熟技术.在 REST 的定义中,一个 Web 应用总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源 ...

  4. 【转】C# 委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegat ...

  5. 处理 JSON null 和空数组及对象

    描述了对 JSON 数据中使用的 null 和空数组及对象的处理. JSON 数据具有 null 和空数组及对象的概念.此部分说明其中每个概念如何映射到 null 和未设置的数据对象概念. Null ...

  6. git初步使用

    git初步使用 主要目的:使用代码控制工具,练习使用git 1.创建新项目 网址如下: https://github.com/kellyseeme?tab=repositories 注意每个人使用的名 ...

  7. 关系数据库&amp;&amp;NoSQL数据库

    在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发.因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库. ...

  8. Mapreduce读取Hbase表,写数据到一个Hbase表中

    public class LabelJob { public static void main(String[] args) throws Exception { Job job = Job.getI ...

  9. mysql create table - data_type length -- clwu

    mysql create table 时,有时需要指定  data_type length http://dev.mysql.com/doc/refman/5.5/en/create-table.ht ...

  10. dom 封装表单控件

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...