H5与小程序数据交互

H5与小程序数据交互,第1张

 功能已通过原生+vue混合开发的方式实现了,现需要将这个功能原封不动的搬到微信小程序。综合各方面评估,选择了微信小程序套webview的方式实现(若时间允许,建议还是通过小程序实现)。

 采用小程序webview的方式,可以复用大部分H5页面,但H5调用团歼的原生方法还是需要重新实现。实现方式主要分以下几种情况(当然也可以通过jssdk的方式去实现 https://qydev.weixin.qq.com/wiki/index.php?title=%E5%BE%AE%E4%BF%A1JS-SDK%E6%8E%A5%E5%8F%A3 ,但不在本文讨论范围内):

 (1) 获取照片,可通过html的input标签实现;

 (2) 获取经纬度,可通过webview的url拼接参数实现;

(3) 人脸识别,可通过H5调起刷脸小程序的方式实现。

 下面主要描述下第3种情况的实现方式。

 H5与小程序交互所涉及的数据部分主要包括两块:

 (1)H5如何将数据传给小程序?

   url参数拼接。

 (2)小程序如何将数据传给H5?

   wx.setStorage及wx.getStorage。

 详细流程如图所示。

 webview小程序pageA调起人脸小程序pageB,pageB回退到pageA。因为pageA重新设置了webview的url,其所嵌套的H5与历史H5页档派面无法进行数据共享,导致业务功塌蠢冲能无法继续。解决办法就是调起人脸小程序之前,在H5页面先将必要的信息通过 localStorage.setItem 保存,人脸识别结束回到H5页面时,再通过 localStorage. getItem 获取所需要的业务数据。

为了不让用户在使用小程序时造陵掘缺成困扰,微信小程序规定页面路径只能是五层,请尽量避免多层级的交互方式。

页面跳转的话就涉及到了多个页面层级

第一种:wx.navigateTo(OBJECT)

保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。

OBJECT参数说明:

参数 类型 必填 说明

url String 是 需要跳转的应用内页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 ‘path?key=value&key2=value2’

success Function 否 接口调用成功的回调函数

fail Function 否 接口调用失败的回调函数

complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)

onLoad: function(options) {

wx.navigateTo({

url: '../index/index'

})

}

1

2

3

4

5

6

1

2

3

4

5

6

第二种:wx.redirectTo(OBJECT)

关闭当前页面,跳转到应用内的某个页面。

OBJECT参数说明:

参数 类型 必填 说明

url String 是 需要跳转的应用散扒内页面的路径

success Function 否 接口调用成功的回调函数

fail Function 否 接口调用失败的回调函数

complete Function 否 接口调用结束的尺辩回调函数(调用成功、失败都会执行)

onLoad: function(options) {

wx.redirectTo({

url: '../index/index'

})

}

1

2

3

4

5

1

2

3

4

5

第三种:wx.navigateBack(OBJECT)

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()) 获取当前的页面栈,决定需要返回几层。

OBJECT参数说明:

参数 类型 默认值 说明

delta Number 1 返回的页面数,如果 delta 大于现有页面数,则返回到首页。

onLoad: function(options) {

var pages = getCurrentPages()

var num = pages.length

navigateBack:function(){

wx.navigateBack({

delta: num

})

}

}

为了不让用户在使用小程序时造成困扰,微信小程序规定页面路径只能是 五层 ,所以需尽量避免多层级的交互方式。 而页面跳转则涉及到多个页面层级。

保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。

需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;

如 'path?key=value&key2=value2'

eg:

wx.navigateTo({

    url:'test?id=1'

})

这种跳转方式默认有返回按钮,返回到上一个页面

关闭当前页面,跳转到应用内的某个页笑迅面。

需要跳转的应用内非 tabBar 的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;

如 'path?key=value&key2=value2'

eg:

wx.redirectTo({

    url:'test?id=1'

})

这种跳转方式默认有返回按钮,返回到上一个页面的再上一层

需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;

如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数

eg:

wx.reLaunch({

    url:'test?id=1'

})

这种跳转方式默认没有返回按钮,不需要默认返回按钮的页面就可以使用这个api了

需要跳转的 tabBar 页面的路径(需在 app.json 的  tabBar  字段定义的页面),路径后不能带参数

{

    "tabBar": {

        "list": [{

            "pagePath":"index",

          冲亩  "text":"首页"

        },{

            "pagePath":"other",

            "text":"其他"

        }]

    }

}

wx.switchTab({

url:'/index'

})

我们需要调转到tabbar定义的页面的时候,就需要这个api了。踩过这个坑的人就知道,除了这个api,其他的都不能跳转到tabar定义过的页面

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()) 获取当前的页面栈,决定需要返回几散升森层。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12240003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存