VUE与Android和IOS原生传值

Posted 叉腰大眼仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE与Android和IOS原生传值相关的知识,希望对你有一定的参考价值。

一.android向Vue传数据

1.Android端传数据

android5.0之前的可以用下面的方式:

webView.loadUrl("javascript:getDataFromNative('" + mParam + "')");

android5.0之后的可以用下面的方式:

webView.evaluateJavascript("javascript:getDataFromNative('" +mId +"')", new ValueCallback()

@Override

    public void onReceiveValue(String s)

//此方法可以得到回调值

        ZJToastUtil.showShort(s);

   

);

以上两种方法要在webView加载完成后调用,如下在onPageFinished后调用才有效:

webView.setWebViewClient(new WebViewClient()       

                  @Override           

 public void onPageFinished(WebView view, String url)       

          super.onPageFinished(view, url);                webView.loadUrl("javascript:getDataFromNative('" + mParam + "')");                webView.evaluateJavascript("javascript:getDataFromNative('" + mId + "')", new ValueCallback()            

         @Override                  

  public void onReceiveValue(String s)                         //此方法可以得到回调值                                         );                    );   

2.ios端传数据

也要在网页加载完调用才生效

NSString *toVueSting = @"vickylizy";

NSString *jsStr = [NSString stringWithFormat:@"getDataFromNative('%@')",toVueSting];

[self->_wkWebView evaluateJavaScript:jsStr completionHandler:^(id _Nullable d, NSError * _Nullable error)

NSLog(@"返回---%@",d);//回调值

];

3.Vue端接收数据

created() 

    //Vue的方法给原生调用,则需要把方法挂在Window下面

    window.getDataFromNative = this.getDataFromNative;

  ,

 methods: 

    getDataFromNative(params) 

      //params: 原生调用Vue时传值(params)给Vue

      console.log("得到原生传值结果:" + params);

      // alert(params);

      //  var dic = 

      //     'name': "vicky"

      // ;

      // return dic; //回调给原生,可写可不

    ,

二.Vue向Android 端传数据

1.Vue端传值

clickFunc(item) 

      // alert(item.contracttitle);

      const u = navigator.userAgent;

      const isiOS = !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);

      if (isiOS) 

        //vue调用iOS方法,且传值给iOS (iOS 方法名为 onItemClick)

        window.webkit.messageHandlers.onItemClick.postMessage(

          item.contracttitle

        );

       else 

        //vue调用Android方法,且传值给Android (Android方法名为 onItemClick)

        $App.onItemClick(

         "要传的数据"  vue给android传值

        );

      

    ,

2.Android端接收数据

//Vue调用Android方法

webView.addJavascriptInterface(this, "$App");//添加js监听 这样html就能调用客户端

@JavascriptInterface

public void onItemClick(String msg)

    Intent intent = new Intent(this, ProjectDetailActivity.class);

    intent.putExtra(ProjectDetailActivity.PROJECT_NAME, msg);

    startActivity(intent);

 3.IOS端接收数据

#pragma mark -WKScriptMessageHandler

- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(nonnull WKScriptMessage *)message

if ([message.name isEqualToString:@"onItemClick"])

NSLog(@"是什么?---%@",message.body);

//做原生操作



原文链接:https://www.jianshu.com/p/055d4f1d8928

以上是关于VUE与Android和IOS原生传值的主要内容,如果未能解决你的问题,请参考以下文章

RN与原生交互——传参并带有回调

Vue框架下 JS与native的交互(iOS&Android)

vue项目 WebViewJavascriptBridge 适配android和ios

uniapp全局传值方式总结(跨端:ios android和小程序)

app内嵌vue h5,安卓和ios拦截H5点击事件

WebViewJavascriptBridge实现js与android和ios原生交互