IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 用uni-app模板写的h5,与安卓、ios端互相交互 -> 正文阅读

[移动开发]用uni-app模板写的h5,与安卓、ios端互相交互

小组中提出要在移动端放入h5页面当做活动页,这就难免不得与移动端进行数据交互

其实方法很简单,但是对于第一次接触的小伙伴来说,确实不能很快理解,只有自主写出来之后,有一种“不过如此”的感觉

废话少说,上代码

重点写在前面? 在调用各端的方法时,方法名一定要一致

比如移动端调用H5方法,H5挂载在window上的方法名要与移动端请求的方法名一致

H5调移动端也一样

首先是先判断h5在哪个端打开

我这里写的多了,仅供参考

const u = navigator.userAgent;
const ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
const iPad = u.indexOf('iPad') > -1;
const iPhone = u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1;
const android = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
if (ios || iPad || iPhone) {
    //  写与iOS交互的代码
}
else if (android) {
    //  写与安卓交互的代码
}

移动端调H5方法? ?H5该如何写

首先在methods中写方法,然后挂载在window上

onLoad{
    const u = navigator.userAgent;
    const ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
    const iPad = u.indexOf('iPad') > -1;
    const iPhone = u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1;
    const android = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
    if (ios || iPad || iPhone) {
        //  写与iOS交互的代码
        window.mobilePatriarchActDetails = this.mobilePatriarchActDetails;
	    window.mobileMuteBgMusic = this.mobileMuteBgMusic;
    }
    else if (android) {
        //  写与安卓交互的代码
        window.mobilePatriarchActDetails = this.mobilePatriarchActDetails;
	    window.mobileMuteBgMusic = this.mobileMuteBgMusic;
    }
}


methods: {
    //移动端无返回参数的情况 (这是移动端app放入后台后,背景音乐还会播放,通过调这个方法来暂停,可以看我上一个文章)
    mobileMuteBgMusic() {
	    this.muteBgMusic = true;
    },
    //移动端返回参数的情况
    mobilePatriarchActDetails(parmas) {
        //parmas就是移动端调H5后 返回给我的数据
       //要在这里进行数据处理  比如存到vuex 或 数据当作请求参数给后端时,要在这里拿到数据后就调用请求后端的方法
	    console.log(parmas)
    },
}
           

H5调用移动端

由于安卓是把方法写在actDetailsInterface 这个类中,所以我直接接收这个类,也就是对象

ios则是需要单独写,单个挂载传递给我,为了统一性,接收ios方法时,我也写在了Mobilemethods里面

onLoad{
    const u = navigator.userAgent;
    const ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
    const iPad = u.indexOf('iPad') > -1;
    const iPhone = u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1;
    const android = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
    if (ios || iPad || iPhone) {
        //  写与iOS交互的代码
        window.mobilePatriarchActDetails = this.mobilePatriarchActDetails;
	    window.mobileMuteBgMusic = this.mobileMuteBgMusic;

        // 接收ios方法
        this.Mobilemethods = {
				backActivity: () => {
                    //如果ios端不需要参数,但也需要传参,可以为null,或者协商好后随便传一个,否则会报错
					window.webkit.messageHandlers.backActivity.postMessage(null);
				},
				observe: id => {
					window.webkit.messageHandlers.observe.postMessage(id);
				},
			};
    }
    else if (android) {
        //  写与安卓交互的代码
        window.mobilePatriarchActDetails = this.mobilePatriarchActDetails;
	    window.mobileMuteBgMusic = this.mobileMuteBgMusic;

        // 接收安卓方法
        this.Mobilemethods = window.actDetailsInterface;
    }
}


methods: {
    //移动端无返回参数的情况 (这是移动端app放入后台后,背景音乐还会播放,通过调这个方法来暂停,可以看我上一个文章)
    mobileMuteBgMusic() {
	    this.muteBgMusic = true;
    },
    //移动端返回参数的情况
    mobilePatriarchActDetails(parmas) {
        //parmas就是移动端调H5后 返回给我的数据
       //要在这里进行数据处理  比如存到vuex 或 数据当作请求参数给后端时,要在这里拿到数据后就调用请求后端的方法
	    console.log(parmas)
    },


   //使用移动端方法
	goBack() {
		let goBackActivity = this.Mobilemethods.backActivity();
		goBackActivity();
	},
	toObs(id) {
		let goObserve = this.Mobilemethods.observe(id);
		goObserve(id);
	},
}

前端要写的东西就这么多了

接下来是安卓端的代码(当时安卓端写了一个包,方便我进行调试)

安卓调用H5

@Override
public void onPageFinished(WebView view, String url) {//页面加载完成
    super.onPageFinished(view, url);
    Log.e(TAG, "页面加载完成:" + url);
    mWebViewBanner.loadUrl("javascript:mobilePatriarchActDetails('" + studentId + "," + activityId + "," + studyDate + "," + token + "')");
}

H5调用安卓

public class ActDetailsInterface {

    public String TAG = "ActDetailsInterface";

    public Context context;

    public ActDetailsInterface(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void observe(String obsId) {
        Log.e(TAG, "观察记录 -> " + obsId);
    }


    @JavascriptInterface
    public void backActivity(){
        Log.e(TAG, "原生页面返回");
    }

}

————end

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:05:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:56:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码