热门标签 | 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,然后结合我上方对应的中间页,就可以做好处理会跳首页的问题;

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


推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 我创建了一个新的AWSSSO(使用内部IDP作为身份源,因此不使用ActiveDirectory)。我能够登录AWSCLI、AWSGUI,但 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
  • 可空类型可空类型主要用于参数类型声明和函数返回值声明。主要的两种形式如下: ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 来自微信官方:微信支付跨平台软件架构首次曝光
    大纲背景线上效果指标什么是软件架构为什么需要软件架构从零到一构建支付跨平台软件架构1.抽象业务流程2.加入路由机制3.管理网络请求4.规范数据传递总结背景作为一个重要业务ÿ ... [详细]
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社区 版权所有