微信小程序-webview分享
项目背景
最近有个讨论区项目需要补充分享功能,希望可以支持在微信小程序进行分享,讨论区是基于react的h5项目,在小程序中是使用web-view进行承载的
可行性
目标是在打开web-view的页面进行分享,那就需要涉及h5和小程序的通讯问题,查看官方文档:
- 网页向小程序 postMessage 时,可以通过bindmessage获取post的信息
- 只有在特定的场景下才会触发bindmessage,例如小程序后退、组件销毁、分享、复制链接等,刚好满足分享的场景
- h5端如何post信息
基于postMessage和bindmessage进行开发
h5代码
注意:我这里是为了方便演示,所以点击按钮才post内容,可以结合自身需求,也可以在加载成功就post数据
- 环境区分:通过判断是否在小程序环境navigator.userAgent.includes(“miniProgram”)
- 动态判断是否有miniProgram:if (!window[“wx”] || !window[“wx”].miniProgram) { return }
- post信息
import React from "react"
import "./WebView.less"
const shareData = https://blog.csdn.net/weixin_43760969/article/details/{
title: "测试h5分享",
path: "https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html",
imageUrl: "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
}
const WebView = () => https://blog.csdn.net/weixin_43760969/article/details/{
const handleSetShareOptions = () => https://blog.csdn.net/weixin_43760969/article/details/{
// 判断是否再微信小程序环境
const userAgent = navigator.userAgent
const isInMiniProgram = userAgent.includes("miniProgram")
if (!isInMiniProgram) https://blog.csdn.net/weixin_43760969/article/details/{ return }
if (!window["wx"] || !window["wx"].miniProgram) https://blog.csdn.net/weixin_43760969/article/details/{ return }
window["wx"].miniProgram.postMessage(https://blog.csdn.net/weixin_43760969/article/details/{
data: shareData,
});
}
return
我是h5页面
分享内容:
分享标题:https://blog.csdn.net/weixin_43760969/article/details/{shareData.title}
分享路径:微信webView文档:https://blog.csdn.net/weixin_43760969/article/details/{shareData.path}
分享封面图:shareData.imageUrl} alt='' className='icon-btn' /
handleSetShareOptions} className="share-container"
require("./icon-share.png").default} alt='' className='icon-btn' /
点击设置分享
}
export default WebView
小程序代码
- 这个newPage是用于承载所有的h5页面的,url应该都是读路由的数据,这里为了方便样式,直接给url赋默认值
- 动态读取url:在onLoad时候,获取options的url,并进行赋值
- 获取h5 post的信息,有两个点需要注意
- e.detail.data是一个数组,post的数据会保存在该数组中,所以需要取data的最后一个数据处理展示
- 分享url的拼接:需要注意的是,我们分享出去的是小程序,并不是h5,所以用户点击进来的肯定还是小程序,所以url的拼接需要把当前的newPage路径带上,然后真正的路径通过路由参数拼接,最终在onLoad通过options获取,也就是上面的第二步
- path: /pages/newPage/newPage?url=${path},
- 特别注意,这时候在h5页面点了分享按钮,其实也是不会响应,还记得bingmessage的触发时机吗,只有我们点击了分享按钮,才会触发bingmessage获取信息,记得一定要点击分享按钮
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!


