微信小程序全部内嵌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);  
    }  
  });
},

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年度巨献,一图总结2023年最重要的AI相关的产品和技术~共48个产品或技术上榜

原文来自DataLearnerAI官方网站&#xff1a; 2023年度巨献&#xff0c;一图总结2023年最重要的AI相关的产品和技术~共48个产品或技术上榜 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703825548892 2022年11月底&#xff0c;ChatGPT横空出世&…

vue-cli3/webpack打包时去掉console.log调试信息

文章目录 前言一、terser-webpack-plugin是什么&#xff1f;二、使用配置vue-cli项目 前言 开发环境下&#xff0c;console.log调试信息&#xff0c;有助于我们找到错误&#xff0c;但在生产环境&#xff0c;不需要console.log打印调试信息&#xff0c;所以打包时需要将consol…

字节跳动内部泄露的前端学习笔记在互联网上大火,在Github标星33K+,完整版赶紧下载

一、入门前端三剑客 1、HTML html 学起来还是挺简单的&#xff0c;无论你是否有编程基础&#xff0c;我觉得都可以快速入门&#xff0c;对于新手&#xff0c;我推荐找个入门的视频看一下&#xff0c;然后跟着视频打代码就可以了&#xff0c;入门教程随便在网上找个免费的视频就…

神经网络:模型部署

【一】模型压缩的必要性与可行性&#xff1f; 模型压缩是指对算法模型进行精简&#xff0c;进而得到一个轻量且性能相当的小模型&#xff0c;压缩后的模型具有更小的结构和更少的参数&#xff0c;可以有效降低计算和存储开销&#xff0c;便于部署在端侧设备中。 随着AI技术的…

浮点数表示法以及相关“小”知识点

浮点数的表示形式 小数点的位置是浮动的。 任意一个二进制数N可 以表示成&#xff1a;N&#xff1d;Sr^j 其中&#xff0c;S为尾数(可正可负)&#xff0c;r为基数(数值)&#xff0c;j是阶码(可正可负)。 1、对一个真值为23.25的十进制数&#xff0c;用浮点数格式表示其原码。 …

C语言——小细节和小知识7

一、逆序字符串 1、递归1 #include <stdio.h> #include <string.h>void ReverseArray(char *str) {char temp *str;//1int len (int)strlen(str);*str *(str len - 1);//2*(str len - 1) \0;//3if(strlen(str 1) > 2)//只要字符串还大于2&#xff0c;就…

uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)

文章目录 ⭐前言&#x1f496; 小程序系列文章 ⭐uni-file-picker 组件&#x1f496; 绑定事件&#x1f496; uploadFile api&#x1f496; 自定义上传 ⭐后端fastapi定义上传接口⭐uniapp开启本地请求代理devServer⭐前后端联调⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是ym…

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

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

智慧启航:机场管理系统的革新与飞机航天展馆的视觉盛宴

随着科技的飞速发展&#xff0c;我们的生活方式正在不断地被改变和提升。而在航空领域&#xff0c;这种变化则更加明显。从机场的智慧管理系统大屏&#xff0c;到飞机航天展馆的三维可视化&#xff0c;再到飞机涡轮发动机的3D模型&#xff0c;科技的力量正在带我们进入一个前所…

再谈动态SQL

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 文章目录 专栏精选摘要引言正文动态sql标签ifchoose...when...otherwisewhere、…

电脑开机自动断电,简单4招,快速解决!

“不知道我的电脑最近是怎么回事&#xff0c;每次一开机就会出现自动断电的情况&#xff0c;有什么方法可以解决吗&#xff1f;” 在使用电脑时&#xff0c;由于电源供应不稳定或过热&#xff0c;以及各种硬件问题&#xff0c;可能会导致电脑开机自动断电。遇到这种情况&#x…

CNAS中兴新支点——源代码审计对企业有哪些好处?

源代码扫描&#xff0c;对应用程序进行静态漏洞扫描&#xff0c;分析源代码中存在的安全风险&#xff0c;运行应用于模拟器中对应用进行实时漏洞攻击检测。 你是否了解源代码扫描对企业的好处&#xff1f; 一、源代码扫描&#xff0c;通常能够帮助企业解决这些问题&#xff1…

TinyGPT-V:小而强大,轻量级骨架打造高效多模态大语言模型!

独家作者&#xff08;csdn、掘金、知乎、微信公众号&#xff09;&#xff1a;PaperAgent 每天一篇大模型&#xff08;LLM&#xff09;文章来锻炼我们的思维&#xff0c;简单的例子&#xff0c;不简单的方法&#xff0c;提升自己 一、论文信息 论文题目&#xff1a;TinyGPT-V…

爬虫学习(1)--requests模块的使用

前言 什么是爬虫 爬虫是一种自动化工具&#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滚轮实现界面缩放效果。此外&#…

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

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

Kubernetes弃用Dockershim,转向Containerd:影响及如何应对

Kubernetes1.24 版本发布时&#xff0c;正式宣布弃用 Dockershim&#xff0c;转向 Containerd 作为默认的容器运行环境。Kubernetes 以 CRI(Container Runtime Interface) 容器运行时接口制定接入准则&#xff0c;用户可以使用 Containerd、CRI-O、CRI- Dockerd 及其他容器运行…

Apple Unity Plugins 接入GameCenter 崩溃解决方案

目录 问题问题原因解决方案可直接使用的UnityPlugins 问题 调用 GKLocalPlayer.Local.FetchItems() 程序崩溃&#xff0c;报错&#xff1a;Thread 1: EXC_BAD_ACCESS (code257, address0x8000000000000002) 启动崩溃&#xff0c;报错&#xff1a;Library not loaded: rpath/Ap…

13. 罗马数字转整数

罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#x…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第三节 栈与堆&#xff0c;值类型与引用类型 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工…