iOS--js和oc交互

原创 2016年08月31日 14:51:38

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

2.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  

}  

3.js调用oc分两种情况

1,js里面直接调用方法

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

    //iOS调用js  

    //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)  
    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  

    //js调用iOS  
    //第一种情况  
    //其中test1就是js的方法名称,赋给是一个block 里面是iOS代码  
    //此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道  
    context[@"test1"] = ^() {  
        NSArray *args = [JSContext currentArguments];  
        for (id obj in args) {  
            NSLog(@"%@",obj);  
        }  
    };  
    //此处我们没有写后台(但是前面我们已经知道iOS是可以调用js的,我们模拟一下)  
    //首先准备一下js代码,来调用js的函数test1 然后执行  
    //一个参数  
    NSString *jsFunctStr=@"test1('参数1')";  
    [context evaluateScript:jsFunctStr];  

    //二个参数  
    NSString *jsFunctStr1=@"test1('参数a','参数b')";  
    [context evaluateScript:jsFunctStr1];  

}  

2,js里面通过对象调用方法JSExport,凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通过js调用到

#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

//首先创建一个实现了JSExport协议的协议
@protocol TestJSObjectProtocol <JSExport>

//此处我们测试几种参数的情况
-(void)TestNOParameter;
-(void)TestOneParameter:(NSString *)message;
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2;

@end

//让我们创建的类实现上边的协议
@interface TestJSObject : NSObject<TestJSObjectProtocol>

@end
#import "TestJSObject.h"

@implementation TestJSObject

//一下方法都是只是打了个log 等会看log 以及参数能对上就说明js调用了此处的iOS 原生方法
-(void)TestNOParameter
{
    NSLog(@"this is ios TestNOParameter");
}
-(void)TestOneParameter:(NSString *)message
{
    NSLog(@"this is ios TestOneParameter=%@",message);
}
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2
{
    NSLog(@"this is ios TestTowParameter=%@  Second=%@",message1,message2);
}
@end
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    //网页加载完成调用此方法

    //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)
    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    //第二种情况,js是通过对象调用的,我们假设js里面有一个对象 testobject 在调用方法
    //首先创建我们新建类的对象,将他赋值给js的对象

    TestJSObject *testJO=[TestJSObject new];
    context[@"testobject"]=testJO;

    //同样我们也用刚才的方式模拟一下js调用方法
    NSString *jsStr1=@"testobject.TestNOParameter()";
    [context evaluateScript:jsStr1];
    NSString *jsStr2=@"testobject.TestOneParameter('参数1')";
    [context evaluateScript:jsStr2];
    NSString *jsStr3=@"testobject.TestTowParameterSecondParameter('参数A','参数B')";
    [context evaluateScript:jsStr3];
}

4.内存管理
现在来说说内存管理的注意点,OC使用的ARC,JS使用的是垃圾回收机制,并且所有的引用是都强引用,不过JS的循环引用,垃圾回收会帮它们打破。JavaScriptCore里面提供的API,正常情况下,OC和JS对象之间内存管理都无需我们去关心。不过还是有几个注意点需要我们去留意下。

1、不要在block里面直接使用context,或者使用外部的JSValue对象。

2、OC对象不要用属性直接保存JSValue对象,因为这样太容易循环引用了。

3、不要在不同的 JSVirtualMachine 之间进行传递JS对象。

版权声明:欢迎转载!

相关文章推荐

iOS js交互(OC)

1.先加载html文件 NSString *mainBundleDirectory=[[NSBundle mainBundle] bundlePath]; NSString *pa...

iOS开发使用WebViewJavascriptBridge实现OC与JS交互

[iOS] 使用WebViewJavascriptBridge实现OC与JS交互 前言 当下,很多APP里面都会有HTML5网页,我们除了简单的用WebView加载显示外,很多情况下,我们还需要和...

iOS开发:JavaScriptCore.framework的简单使用--JS与OC的交互篇

原文地址:http://www.cnblogs.com/shaoting/p/5247208.html iOS7之后苹果为众猿推出了JavaScriptCore.framework这个框架,这个...

IOS中的OC和JS的交互(一)

随着程序的开发,发现IOS中使用OC和js的交互越越多,这里就先做以下对简单的OC与JS交互,进行总结。总体效果如下: 这里对对ios中OC与JS简单的交互进行介绍,以及实现。程序中简单的实现了js...

[iOS] 使用WebViewJavascriptBridge实现OC与JS交互

字数1468 阅读6721 评论29 喜欢49 前言 当下,很多APP里面都会有HTML5网页,我们除了简单的用WebView加载显示外,很多情况下,我们还需要和WebView进行...

iOS - oc与js交互的几种方式

本文主要讲js调用oc 方式一:通过替换js中的function(方法)方式二:通过注入对象,直接调用对象方法方式三:利用网页重定向,截取字符串. 代码如下: #import "Vi...

IOS 开发OC 与JS 交互 WebviewJavaScriptBridge 的简单实用(二)

之前的博客OC(Object_C)与前端页面JS(JavaScript)交互整理(一) 中简单的介绍啦,OC与JS 交互中的,苹果提供的原生的stringByEvaluatingJavaScriptF...

IOS中 使用JavaScriptCore 实现OC与JS的交互

转: http://www.jianshu.com/p/cdaf9bc3d65d 一、说明 这篇文章记录自己在研究OC与JS交互中的所得,以及遇到的问题与解决 由于苹果的审核时间...

实例:iOS 中的 JS 交互 OC & Swift 双语

写在前面 随着 App 开发日趋成熟,不少设计模式和开发流程都被应用其中,也跟着日趋成熟。其中一条相信很多人都听说过,不少项目也是这样做的: 用 H5 页面适配代替 Native App 原生...

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

OC与JS的交互(iOS与H5混编)在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景。 iOS中加载html网页, 可以使用UIWebView或WKWebView. 本篇博客将介绍两种控件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)