美文网首页重点html
浅谈JS与OC相互调用并传参(一)

浅谈JS与OC相互调用并传参(一)

作者: 名字太多不会起 | 来源:发表于2016-06-02 11:32 被阅读3218次

前几天忙着微信支付,这几天刚刚抽出时间写一写之前在工作中研究的JS调用OC方法,还有就是OC给JS传值.我之前工作在APP中加入一个WebView,但是在APP中登录的同时也要在WebView中同时登陆,我们研究了一个方法就是把token/model/手机类型(iOS或Android)/ 同时在js中根据token是否为NULL,来调用APP的登录方法.

JS与OC相互相互调用,我知道的是有三种方法

1.WebViewJavascriptBridge(第三方) 2.WKWebView(据说以后要代替WebView) 3.JSExport(JavaScrptCore框架) 4.webView shouldStartLoadWithRequest:中截取JS传过来的URL调用方法并传值.
**
博主用的则是最后一种和"JSExport".先主要讲一下JSExport的用法吧.
首先需求是,我要把我这边的token.model.和设备信息传给JS
**


**
首先添加JavaScriptCore.framework框架
**

添加JavaScriptCore框架
**
导入头文件
**
import <JavaScriptCore/JavaScriptCore.h>
**
加载本地HTML
**
    NSString *basePath = [[NSBundle mainBundle]bundlePath];
    NSString *helpHtmlPath = [basePath stringByAppendingPathComponent:@"GroupPay.html"];
    NSURL *url = [NSURL fileURLWithPath:helpHtmlPath];    
    [_webView loadRequest:[NSURLRequest requestWithURL:url]];

**
在 webViewDidFinishLoad:(UIWebView *)webView调用(前提要给webView加代理)
**


-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    
    if ([BNCUserDefault objectForKey:@"token"] == nil) {
        NSString *token = @"null";
        NSString *model = @"null";
        NSString *ios = @"ios";
        JSValue *picCallback = self.context[@"picCallback"];
        [picCallback callWithArguments:@[token,model,ios]];
    } else {
        NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];
        NSString *model =[BNCUserDefault objectForKey:@"model"];
        NSString *ios = @"ios";
        JSValue *picCallback = self.context[@"picCallback"];
        [picCallback callWithArguments:@[token,model,ios]];

    }

**
在JS端是这样写的
**



  
                 var picCallback = function(token,model,app) {
                     alert(token);
                     alert(model);
                     alert(app);
                }

**
我们运行一下看一下效果
**

token的alert model的alert 设备信息

**
接下来我使用一种方法调用JS的方法并返回给参数
**



self.context[@"model"] = ^() {
        NSLog(@"调用model的方法");
        NSString *model =[BNCUserDefault objectForKey:@"model"];
       return model;
}

**
在JS端我是这样写的
**

        var a = model();
        alert(a);
        
Paste_Image.png

但这个也会有个问题:问题是这个在网页加载之后我们会把这个值传给JS,但是JS是要在加载网页过程中拿到这些值,所以在调用中往往会获得一个nil.然而这个问题困扰我好久,最后只能在JS端加了一个延迟加载,这个会对速度和用户体验会有影响的.好先写到这吧


相关文章

  • 无标题文章

    OC与JS的交互 这个demo主要做了以下几个功能: js调用oc,并传值 oc调用js 并传值 js调用oc,...

  • 浅谈JS与OC相互调用并传参(一)

    前几天忙着微信支付,这几天刚刚抽出时间写一写之前在工作中研究的JS调用OC方法,还有就是OC给JS传值.我之前工作...

  • OC与H5交互

    1: WKWebView 与JS 原生交互 ?OC调用H5方法,给H5传参 ?H5给OC传参 2: OC使用第三方...

  • JS和OC相互调用并传值,WebViewJavascriptBr

    JS和OC相互调用并传值,WebViewJavascriptBridge 的使用 在iOS开发中难免会遇到js和o...

  • JS与OC交互

    JS调用OCOC调用JS JS与OC 相互调用 //网页加载完成调用此方法

  • JS与OC交互

    iOS js oc相互调用(JavaScriptCore) iOS js oc相互调用(JavaScriptCor...

  • WkWebView和JS交互

    JS调用OC方法 oc中初始化WKWebView对象,进行相应的配置 JS中定义给oc传参的方法,注意sendMe...

  • WebViewJavascriptBridge 调用过程(二)

    JS调用OC过程 以WKWebView为例1、OC端注册 2、JS端调用OC端注册的名称,并传参数设置回调函数。 ...

  • OC关于js相关

    一、OC调用js 二、js调用OC 无参 在js中定义一个自己的协议头 方法调用 有参 一个参数的时候 两个参数的...

  • iOS与JS(二):MessageHandler(OC&

    参考:iOS下JS与OC互相调用(三)--MessageHandler iOS与JS的相互调用除了URL拦截(iO...

网友评论

本文标题:浅谈JS与OC相互调用并传参(一)

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