最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript和原生应用常用的数据交互方式的介绍

来源:懂视网 责编:小采 时间:2020-11-27 19:29:02
文档

JavaScript和原生应用常用的数据交互方式的介绍

JavaScript和原生应用常用的数据交互方式的介绍:本篇文章给大家带来的内容是关于JavaScript和原生应用常用的数据交互方式的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。场景1在原生app中经常会使用到H5页面,比如说电商中的活动页,一些电商中的详情页,等等...这些页面都有一个
推荐度:
导读JavaScript和原生应用常用的数据交互方式的介绍:本篇文章给大家带来的内容是关于JavaScript和原生应用常用的数据交互方式的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。场景1在原生app中经常会使用到H5页面,比如说电商中的活动页,一些电商中的详情页,等等...这些页面都有一个

本篇文章给大家带来的内容是关于JavaScript和原生应用常用的数据交互方式的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

场景1

在原生app中经常会使用到H5页面,比如说电商中的活动页,一些电商中的详情页,等等...这些页面都有一个特点,那就是在未来修改的可能性,和一次性的几率特别的大。所以用H5的页面是最睿智的一种选择。
一旦使用了H5那么就少不了和原生开发的一些交互(Android, IOS)如下的方案能够帮助你解决。
其实现原理是原生在js的window对象中注入一个js方法,以备原生应用进行处罚触发,就和我们平时去调用onclick的方法一样简单。

js代码:

// mobile/index.js 常用js 调用原生的方式都在这里体现。
export default {
 /**
 * 调用移动端方法
 *
 * @param {*} {name, params, call} 移动端注入的方法名 | 参数 | 回调
 */
 callMoblieMethods({name, params, call}){
 // 移动端安卓的环境
 if(window.android) {
 // 移动端使用java所以不能直接解析json,只能解析字符串或者json字符串
 window.android[name](JSON.stringify(params)); 
 }
 // 移动端IOS的环境
 if(window.webkit && window.webkit.messageHandlers) {
 window.webkit.messageHandlers[name].postMessage(params);
 }
 }
}

调用方式

if(window.android || (window.webkit && window.webkit.messageHandlers.activityDetails)) {
 mobile.callMoblieMethods({ name: 'activityDetails', params: {activityId: item.act_id}});
}

这个判断条件大家看起来可能很诡异,我测试过这各种机器的机型,安卓机window肯定是没有的属性,但是在IOS上他会自带webkit属性所以我们先判断他是否有webkit属性在判断他是否有注入的方法名这样他就能很好的调用这个方法了;

为了方便大家查找这里也附上移动端的代码:

//Android

public class AndroidJavascriptInterface {

 Activity mActivity;

 public AndroidJavascriptInterface(Activity activity) {
 this.mActivity = activity;
 }

 //诊所详情
 @JavascriptInterface
 public void clinicDetails(String jsonData) {
 Log.i("znh", "H5-JS-诊所详情");
 Intent intent = new Intent(mActivity, OutPatientActivity.class);
 Bundle bundle = new Bundle();
 bundle.putString(Constants.CLINIC_ID, GsonUtil.getJSONObjectKeyVal(jsonData, "clinicId"));
 intent.putExtras(bundle);
 mActivity.startActivity(intent);
 }

 //活动详情
 @JavascriptInterface
 public void activityDetails(String jsonData) {
 Log.i("znh", "H5-JS-活动详情");
 Intent intent = new Intent(mActivity, ActivityDetailActivity.class);
 Bundle bundle = new Bundle();
 bundle.putString("id", GsonUtil.getJSONObjectKeyVal(jsonData, "activityId"));
 intent.putExtras(bundle);
 mActivity.startActivity(intent);
 }
}


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

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
[wkWebConfig.userContentController addScriptMessageHandler:self name:@"clinicDetails"];
[wkWebConfig.userContentController addScriptMessageHandler:self name:@"activityDetails"];

通过这个流程大家就能很方便的调用原生的方法了。

场景2

我们需要在短信中使用某个链接去打开原生应用如果没有那么就会提示他去下载某个应用,首先原生的应用需要定义一个url链接以备前端程序员在浏览器中调用,先给大家看一下链接示例:

// IOS
iOSStarClinic://

// Andriod 
yjjkyl://starclinic

短小精悍,你只需要调用这个就可以了

那么在js中要怎么做呢?

if(this.isIOS) {
 window.location.href = 'iOSStarClinic://';//与APP约定的一个协议URL
} else {
 var state = null;
 try {
 state = window.open('yjjkyl://starclinic', '_blank');//与APP约定的一个协议URL
 } catch(e) {}
 if (state) {
 window.close();
 } else {
 window.location.href = gbs.patientDownUrl;
 }
}

先判断一下当前是IOS还是安卓环境,其实现在的浏览器已经不能通过偏方(计时的方法)来解决检查当前时候有没有安装应用了,因为浏览器会弹出提示框用户确认才能跳转所以用户一旦不点击确认那么浏览器就会进行跳转!所以在当前页应该要给用户显示一些内容以便用户未打开应用的时候有其他的业务流程。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JavaScript和原生应用常用的数据交互方式的介绍

JavaScript和原生应用常用的数据交互方式的介绍:本篇文章给大家带来的内容是关于JavaScript和原生应用常用的数据交互方式的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。场景1在原生app中经常会使用到H5页面,比如说电商中的活动页,一些电商中的详情页,等等...这些页面都有一个
推荐度:
标签: 方法 js javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top