热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

记:微信小程序内嵌H5问题

上一节讲过App内嵌H5解决了一系列问题,基本上大多数遇到的问题都能够解决,这节就说一下微信小程序内嵌H5问题,由于小程序的约束很大,小程序的webview使用时和微信公众号差不了

上一节讲过App内嵌H5解决了一系列问题,基本上大多数遇到的问题都能够解决,这节就说一下微信小程序内嵌H5问题,由于小程序的约束很大,小程序的webview使用时和微信公众号差不了多少,小程序的webview对比使用App内嵌来说小程序的权限限制太多了,只能在进入页面和出页面才能传递数据,所以这时可以以小程序的webview为主导,小程序本身功能为辅来进行内嵌(我这边需要快速输出,不得已而为之),但是也遇到了一些问题:

  • 由于小程序本身可以授权手机号码,而公众号无此功能,所以就以小程序做了登录授权,那么如何让小程序的登录信息同步到内嵌的H5呢(这里不按照App的方式,这种webview链接不安全);
  • 由于公众号有自身的一套支付功能,但小程序本身也有一套支付功能,但是这两套竟然不通,这里强烈吐槽,那么如果内嵌的H5要走支付就需要调起小程序的支付,但是后续流程就截断了,如何处理;
  • 微信小程序是可以根据对应内嵌页面url来进行处理跳转到对应的内嵌H5页面的,但是这个时候返回按钮是没有的,如何处理返回到首页呢;
  • 由于公众号的本地缓存和小程序所用的不是一套,不过它们webview的缓存是一套的,现在一个场景:用户在公众号登录过,小程序内嵌的有些页面不需要登录授权的就可以进入,从其他渠道进入到小程序内嵌的一个不需要登录授权的页面,小程序的登录凭证已过期,如何处理在不需要登录的这个页面跳转时进行微信小程序登录授权

一.小程序登录授权给内嵌H5

其实这里可以用一个技巧,不过也需要后端的配合,当微信小程序登录后,使用get请求接口,携带登录信息,让接口重定向到对应页面,这时这个页面就已经有了对应的登录token;

二. 支付跳转和外部跳转返回问题

场景是这样的,如果有一个流程是需要走支付,但是微信公众号自己的支付是不能够在微信小程序内嵌webview中支付的,这时候就需要借助跳转到微信小程序的页面进行支付,走微信小程序的支付流程后再跳转到内嵌的页面,但是从这里就会被截断了,之前的页面就会丢失,且无法返回到首页。

这时想到了一种办法,我们创建一个通用的中间页,用于承载一些页面进行从中间插入的截断性操作,在中间页中写入一个本地缓存的标记:





以上代码,我们有一个中间页,所有的跳转都往中间页跳转,由中间页首先保存一个缓存状态storageKey,第一次进入时无法获取的,这时会自动跳转到对应的业务goNextUrl中,当用户如果想回退,这时回退到中间页,中间页判定缓存状态存在,则重定向到首页,只要是能回退到首页或者其他tab页面就行(若想回退到支付之前的应该是不行的),也比较适用外部跳转到内嵌的一个页面,返回正好能达到首页;但是这种有个问题,如果第一次从外部(这个外部可以是其他浏览器)跳转进入,然后我再从外部跳转进入,那么会出现页面跳转回首页了,这种暂时还未有解决方案,除非用原生小程序实现,只能说项目就这样,没得办法

三. 最后一个问题 (字太长不再粘过来,问题在文章开头)

这里针对vue SPA设置的vue-routerhash模式,比如有一个链接如下(假设链接都可以访问):

A. https://www.test.com/#/home/index
B. https://www.test.com/?hasauto=0#/home/index

只要是A链接能打开,B链接也能打开,只是B链接中间加入了一个参数,而且根据vue-router的hash模式规则,只会改变hash值来切换页面,对于?hasauto=0 如果我们只使用vue-router提供的方法单页面跳转,是不会被清除的,如果使用window.location的一些跳转方法,且没有加入?hasauto=0就会被清除;

我们就可以采取上方这种在hash # 前加入自定义的一些参数,也不用在url后加入参数,然后在跳转时的vue-router钩子函数beforeEach中做处理,如果是对应页面,且存在hashauto=0的参数就跳转到对应的小程序授权页面,需要携带下一个页面的url,然后结合我上方对应的中间页,就可以做好处理会跳首页的问题;

最后,不建议过多依赖于内嵌,内嵌只是解决一些基本的更新等问题,而不能作为主体功能,从功能性能和用户体验上都不是最优解;作为开发的我是一边口吐芬芳一边干着,痛苦并痛苦着,也算是搞完了;


推荐阅读
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
author-avatar
秋雨蒙蒙往事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有