微信小程序全部内嵌H5遇到的问题记录

微信小程序内嵌H5遇到的问题

  • 问题1:js-sdk的配置
    • h5里面
    • 微信公众平台
  • 问题2:业务域名的配置
    • 小程序开发
    • 微信公众平台
  • 问题3:H5与小程序的消息传递。
      • 方案1
        • H5
      • 方案2
        • H5页面
        • 小程序开发
      • 方案3
        • H5页面
        • 小程序页面

使用H5来开发APP,之后将该H5项目进行发布,生成一个URL连接。将该链接放在小程序项目里面,在小程序里面使用 web-view接收URL展示。

问题1:js-sdk的配置

H5项目里面使用了微信的js-sdk。
因此需要去微信公众平台-公众号设置-功能设置-JS接口安全域名。
配置好之后,才能在H5里面使用微信相关的api。

h5里面

打开项目,找到后缀为html的文件,在head里面增加

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

打开终端输入

npm install weixin-js-sdk

在这里插入图片描述

需要使用的页面

<script>import wx from 'weixin-js-sdk';export default {onReady() {this.getcofing();},methods: {async getcofing() { //获取wx的config// 下面的result是调用后台接口返回的数据。这里就不写了。找后台开发人员要就可以了。wx.config({beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题debug: false,appId: result.appId, // 必填,企业微信的corpID.timestamp: result.timestamp, // 必填,生成签名的时间戳nonceStr: result.nonceStr, // 必填,生成签名的随机串signature: result.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法jsApiList: ['getLocation','closeWindow','getLocalImgData','chooseImage']// 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来});}}}
</script>

微信公众平台

因为项目里面引入了js-sdk工具包,就需要在微信公众平台里面绑定JS接口域名。

步骤一:绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

备注:登录后可在“开发者中心”查看对应的接口权限。

因为我没有公众号的权限,所以没办法截图。
其实就是在打开微信公众平台页面,扫码登录的时候选择公众号登录,不要选择小程序登录。

登录微信公众平台-小程序-开发管理-服务器域名查看配置好的域名URL。这里需要配置开发接口的所有域名。
如果该域名之前没有进行验签,还需要下载验签文件给后台,将验签文件放在这个域名的根目录下面。

在这里插入图片描述

问题2:业务域名的配置

H5发布之后生成的URL连接在小程序里面打不开。
需要再微信公众平台-开发管理-开发设置-业务域名配置相关的URL域名。

小程序开发

<web-view src="https://xxx.cn/h5/index.html#/" ></web-view>

在这里插入图片描述

其中https://xxx.cn/h5/index.html#/就是H5发布之后的URL连接,可以直接在浏览器打开。也可以在小程序微信公众网页开发项目里面打开。

在这里插入图片描述

微信公众平台

小程序使用了web-view就需要在微信公众平台配置业务域名。

微信公众平台-开发管理-开发设置-业务域名配置
点击修改按钮,再次扫码进入。输入发布好的H5域名。如果该域名之前没有进行验签,还需要下载验签文件给后台,将验签文件放在这个域名的根目录下面。

在这里插入图片描述

问题3:H5与小程序的消息传递。

项目里面需要下载附件,H5页面使用Window.open()方法,在小程序里面无法下载。并且使用小程序的postmessage方法也不行。
最终使用了微信的页面跳转方法。并且在小程序项目里面新增加了一个页面,在新增页面里面使用了小程序原生的下载方法。

方案1

刚开始使用的是Window.open()方法。该方法在H5页面是正常可以下载附件的。到那时放在小程序里面就失效了。(放弃)

H5

window.open(id)

方案2

查看小程序官网使用web-view的postmessage能力。
在这里插入图片描述

H5页面
//微信小程序环境wx.miniProgram.getEnv(function (res) {   wx.miniProgram.postMessage({ data: {load: '123'}, });wx.miniProgram.navigateBack({delta : 1});})
小程序开发
<web-view src="https://xxx.cn/h5/index.html#/" bindmessage="handleGetMessage"></web-view>
handleGetMessage(e:any){console.log('接收到消息',e.detail)}

这个方法有一个致命的缺陷,就是小程序端接收到消息是有限制条件的。只能在小程序原生操作后退、组件销毁、分享、复制链接的时候才能生效。
所以对于我这里需要的功能,该方法是不能够满足的。(放弃)
当然,如果项目里面正好需要这几个操作进行传值,就可以使用该方法。在这里插入图片描述
在这里插入图片描述

方案3

还是使用js-sdk里面的api。

H5页面
wx.miniProgram.navigateTo({url:"/pages/index2/index?fileUrl="+encodeURIComponent(需要传递的参数) })
小程序页面

新增加一个pages页面命名为index2。
然后再ts页面的onload里面接收参数,并进行处理操作。

onLoad(e:any) {this.setData({downLoad:e.fileUrl})this.handleGetMessage(e.fileUrl)},
// 下载
handleGetMessage(e:any){console.log('接收到消息',decodeURIComponent(e))let loadUrl=decodeURIComponent(e)wx.downloadFile({  url: loadUrl, // 替换为你要下载的文件的 URL  success(res) {  if (res.statusCode === 200) {  wx.showModal({title: '文件临时路径',content: res.tempFilePath,success (res) {wx.navigateBack({delta: 1})}})if(loadUrl.endsWith('.png') || loadUrl.endsWith('.jpg')){// 如果包含图片// 保存到相册wx.saveImageToPhotosAlbum({filePath: res.tempFilePath,  success(res) { console.log('图片保存成功'); },fail(err) {  console.log('图片保存失败'); }})// 获取图片预览信息  wx.getImageInfo({  src: res.tempFilePath,  success(info) {  // 在小程序中预览图片  wx.previewImage({  current: res.tempFilePath, // 当前显示图片的http链接  urls: [res.tempFilePath] // 需要预览的图片http链接列表  });  }  }); }else{wx.openDocument({  filePath: res.tempFilePath,  success (res) {  console.log('文件打开成功');  },  fail (err) {  console.log('文件打开失败', err);  }  });  }// wx.navigateBack({delta: 1})} else {  console.log('下载失败', res.errMsg);  }  },  fail(err) {  console.log('下载失败', err);  }  });
},

目前使用的是第三种方案,比较符合要求。之后如果有更好的方案再更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TG7050CKN,TG7050SKN ,TG7050CMN,TG7050SMN

爱普生推出的温补晶振型号&#xff1a;TG7050CKN&#xff0c;TG7050SKN &#xff0c;TG7050CMN&#xff0c;TG7050SMN频率范围为 10mhz ~ 54mhz 适用于广泛的频率需求。这几款的特点就是耐高温&#xff0c;温度可达105℃高温&#xff0c;而且都是高稳定性温补晶振&#xff0c;&…

Springboot单元测试mock踩坑

mock bean方式 //mock bean方式一MockBeanpublic UserMapper userMapper;//mock bean方式二Beanpublic LogMapper logMapper() {return Mockito.mock(LogMapper.class);} 如何注册mapstruct bean //扫描mapstruct包路径ComponentScan("xxx.xxx.mapstruct")public cl…

ERP与智能商品系统在供应链管理上有哪些区别和优势?

ERP系统和智能商品系统在供应链管理方面有以下区别和优势&#xff1a; 范围和综合性&#xff1a;ERP系统涵盖了企业的整个供应链管理过程&#xff0c;包括供应商管理、采购管理、库存管理、生产计划和物流管理等。它可以实现供应链上下游的信息共享和协同&#xff0c;提高供应…

计算机网络复习2

物理层 文章目录 物理层通讯基础奈奎斯特定理香农定理编码与调制交换传输介质&#xff08;了解&#xff09;物理层设备 通讯基础 数据信号码元信源信道信宿单工通道&#xff1a;只有一个方向半双工通道&#xff1a;不能同时发送和接收全双工通道 奈奎斯特定理 规定&#xff…

下载完redis每次启动项目必须打开redis服务,否则不能运行,解决方法

redis-server.exe --service-install redis.windows.conf 在redis的目录启动终端运行此命令可以下载redis服务&#xff0c;然后在服务里面启动redis服务&#xff0c;之后就可以不用打开小黑框再启动了 redis下载地址&#xff1a; Redis下载安装教程_redis 3.2下载-CSDN博客

【C++核心编程(一)】

一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域&#xff1a; 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的。 全局区&#xff1a;存放全局变量和静态变量以及常量。 栈区&#xff1a;由编译器自动分配释放,存放函数的…

《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线

前言 使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色&#xff0c;问题就出现了&#xff01;&#xff01; 仔细看原来是两层&#xff0c;默认背景色是白色。 想着把背景色改为透明应该能用&#xff0c;结果发现背面是一条实线&#xff0c;难怪要用白色遮挡…不符…

ChatGPT4.0(中文版)国内无限制免费版(附网址)

ChatGPT&#xff0c;由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴&#xff0c;无论你有何问题或需要什么帮助&#xff0c;它都能提供有用的信息。 经过不断的研发和更新&#xff0c;ChatGPT的性能和功能得到了显著提升。现在&#xff0c;我们将重点介绍ChatGPT的两个…

TVS 管选型与 ESD 防护设计

文章目录 ESD 防护设计 TVS管的基础特性 TVS管的选型方法 TVS管布局细节 参考文献 ESD 防护设计 静电防护设计是让电路板外接的各类金属按钮开关在接触到外界空气放电或接触放电时&#xff0c;在这种瞬间出现的大能量注入到电路板后&#xff0c;能够通过某种设计好的通道泄…

VSCode + vite + vue3断点调试配置

没想到这个配置我搞了一上午&#xff0c;网上很多的配置方案都没有效果。总算搞定了&#xff0c;特此记录一下。 首先需要在.vscode文件夹下面创建launch.json配置文件。然后输入如下配置&#xff1a; {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。//…

「Verilog学习笔记」状态机与时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 状态机写法 timescale 1ns/1nsmodule huawei7(input wire clk ,input wire rst ,output reg clk_out );//*************code***********//parameter S0 0, S1 1 , S2…

批量抠图软件哪个好用?推荐这三款抠图工具给你

在数字图像处理的世界里&#xff0c;抠图是个不可或缺的环节。对于那些经常需要从复杂背景中提取主体的设计师和摄影师来说&#xff0c;抠图技巧无疑是一项宝贵的职业技能。然而&#xff0c;当面对大量的抠图需求时&#xff0c;手动处理不仅耗时&#xff0c;而且效率低下。因此…

Python圣诞树代码

Python圣诞树代码 # 小黄 2023/12/25import turtle as t # as就是取个别名&#xff0c;后续调用的t都是turtle from turtle import * import random as rn 100.0speed(20) # 定义速度 pensize(5) # 画笔宽度 screensize(800, 800, bgblack) # 定义背景颜色&#xff0c;可…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync&#xff08;remote synchronize&#xff09;是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件&#xff0c;它可以将一个目录的文件快速地同步到另一个目录&#xff0c;还可以通过网络快速同步多台主机间的文件…

ssm基于javaweb的数学竞赛网站的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装数学竞赛网站软件来发挥其高效地信息处理的作用&#xff0c…

分享72个NodeJs项目源码总有一个是你想要的

分享72个NodeJs项目源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1_bzxbmBlN8ga4-Ci1I0-0w?pwd6666 提取码&#xff1a;6666 项目名称 A lottery webapp …

【快速全面掌握 WAMPServer】07.整明白 MySQL 和 MariaDB

网管小贾 / sysadm.cc 上一篇我们学习了 PHP &#xff0c;今天我们接着来学习了解一下另一位 LAMP 中的 M &#xff0c;同样是作为四剑客之一的 MySQL/MariaDB 。 MySQL/MariaDB 实际上是指数据库&#xff0c;是一种关系型数据库管理系统&#xff0c;可与 PHP 解释器一起配合&…

零基础入门跨境电商独立站,看这篇文章就够了!

对于跨境电商卖家来说&#xff0c;多平台、多站点的布局是非常重要的战略。这样做可以规避”鸡蛋放在同一个篮子里”的风险也能够追求更高的销售额和利润。同时&#xff0c;市场的变化也带来了新的发展机会&#xff0c;因此很多出海企业都希望抓住独立站的新机遇&#xff0c;抢…

Spire.Office 8.12.2 for .NET

Spire.Office 8.12.2 发布。在此版本中&#xff0c;Spire.Doc支持Word到PCL和PostScript转换中的文本整形以及确定文档是否加密&#xff1b;Spire.Presentation支持将母版页转换为图像&#xff1b;Spire.PDFViewer支持在WinForm项目中使用Ctrl滚轮实现界面缩放效果。此外&#…

KaiwuDB 受邀亮相“ACDU 中国行”数据库技术沙龙(西安站)

12月23日&#xff0c;由中国计算机学会&#xff08;CCF&#xff09;指导&#xff0c;浪潮数据库、中国数据库联盟、墨天轮数据库社区等联合主办的“ACDU 中国行”数据库技术发展与实践沙龙&#xff08;西安站&#xff09;成功举办。KaiwuDB 高级架构师赵衎衎受邀出席沙龙并做主…