美文网首页
Object-C与JavaScript通信

Object-C与JavaScript通信

作者: program袁 | 来源:发表于2016-07-11 16:54 被阅读30次

    关于JS与OC互调的方法,用的较多的有以下两种方式:

    一、简单的:

    1)OC调用JS:

    OC提供了系统方法:

    NSString *str = [self.webview stringByEvaluatingJavaScriptFromString:@"testJS();"];

    2)JS调用OC

    通过改变document.locations=“”,然后回调UIWebview的

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

    函数,在上面这个函数中,通过截取NSURLRequest解析js中传递过来的参数,再根据参数来选择早已定义好的方法。

    二、iOS7之后的新方法---JavaScriptCore

    1.导入framework

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

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

    2.导入头文件

    OC调用JS比较简单,下面直接可以

    JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //获取执行环境

    NSString*jsFunctStr=@"cc()"; //JS内部的方法,OC可以调用JS

    [context evaluateScript:jsFunctStr];

    JS调用OC有两种方法,方法的不同影响后台JS代码的写法不同

    第一种:js里面直接调用方法

    JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //获取执行环境

    context[@"log"] = ^() { //定义一个log方法,JS可以调用这个log方法

    };

    js代码直接调用:

    getVipId()

    第二种:js里面通过对象调用方法

    首先创建一个类   并且规定一个协议

    @protocolInviteFriendsActivityProtocol

    - (NSString*)getMemberID;

    @end

    @interfaceInviteFriendsActivity :OWBaseViewController

    @property(nonatomic,strong)JSContext*context;

    @property(nonatomic,strong)NSString*navTitle;

    @property(nonatomic,strong)NSString*url;

    @end

    .m 类的实现

    - (void)getMemberID

    {

    NSLog(@"getMemberID");

    }

    webView调用时:

    - (void)webViewDidFinishLoad:(UIWebView*)webView

    {

    self.context= [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    }

    self.context[@"InviteFriendsActivity"]=self;

    js代码需通过类调用:

    InviteFriendsActivity.getMemberID();

    相关文章

      网友评论

          本文标题:Object-C与JavaScript通信

          本文链接:https://www.haomeiwen.com/subject/pvljjttx.html