当前位置: 首页 > news >正文

微信公众号h5写一个全局调用微信分享功能

1. 首先先安装依赖

npm install weixin-js-sdk --save

 2. app.vue文件

<script>
    export default {
        onLaunch: function(e) {},
        onShow: function(e) {
            console.log('App Show页面初始');
            // 路由参数存缓存的  这是为了防止他点击其他页面 这两个id没有了
            var querys = this.$route.query; // 路由参数

            if (querys) {
                if (querys.friendId) {
                    uni.setStorageSync("friendId", querys.friendId)
                }
                if (querys.partnerId) {
                    uni.setStorageSync("partnerId", querys.partnerId)
                }
            }
        },
        onHide: function() {
            console.log('App Hide')
        },
        mounted() {
            // let pages = []
            // pages = getCurrentPages();
            // console.log(pages, 'pages');
            // var redirect_link = pages[pages.length - 1].route;
            // this.setWxShare() // 分享传入参数
        },
        globalData: {
            // #ifdef H5
            setWxShare: function(redirect_link, id, imgurl) {

                var merge = require('webpack-merge'); //调用微信集成的方法

                let wzhi = window.location.href //获取当前页面路由
                this.hi = wzhi.split("#")[0];
                // console.log(this.hi, 'this.hi');
                var userInfo = uni.getStorageSync("userInfo");

                let url = "";
                var routes1 = ""

========这些是因为我们的需求是要带账号的id参数=========
                if (userInfo) {
                    // 有自己的用户信息就说明是老用户  老用户的话就用自己的friendId  删掉带过来的friendId
                    if (this.hi.indexOf("friendId") != -1) {
                        // 路由传过来的friendId 截取掉  分享只需要自己的friendId
                        var routes1 = this.hi.split("friendId")[0];
                        url = routes1 + "friendId=" + userInfo.userId;

                    } else if (this.hi.indexOf("partnerId") != -1) {
                        // 路由传过来的partnerId 截取掉  分享只需要friendId
                        var routes1 = this.hi.split("partnerId")[0];
                        url = routes1 + "friendId=" + userInfo.userId
                    } else if (this.hi.indexOf("?") != -1) {
                        url = this.hi + "&friendId=" + userInfo.userId
                    } else {
                        url = this.hi + "?friendId=" + userInfo.userId
                    }
                } else {
                    // 未登录状态  或者新用户
                    if (this.hi.indexOf("friendId") != -1) {
                        routes1 = this.hi.split("&friendId")[0];
                        url = routes1
                    } else if (this.hi.indexOf("partnerId") != -1) {
                        routes1 = this.hi.split("&partnerId")[0];
                        url = routes1
                    } else {
                        url = this.hi
                    }
                }

                
                // 改变路由参数 但是不刷新页面
                window.history.replaceState(null, null, url);

================不需要的话就删掉=======
                url = window.location.href.split("#")[0];

                //请求接口返回签名
                var params = {
                    url: url
                }
                this.common.getConfig(params).then(res => {

                    if (res.code == 200) {

                        var result = res.data;
                        // console.log(result, "result------------------")
                        var wxshare = require('jweixin-module'); //调用微信集成的方法
                        wxshare.config({
                            debug: false, //是否打开调试
                            appId: result.appId, // 公众号的唯一标识  
                            timestamp: result.timestamp, // 生成签名的时间戳  
                            nonceStr: result.nonceStr, // ,生成签名的随机串  
                            signature: result.signature, // 签名  
                            jsApiList: [
                                "updateAppMessageShareData",
                                "updateTimelineShareData",
                            ]
                        });
                        wxshare.ready(function() {
                            //分享给朋友
                            wxshare.updateAppMessageShareData({
                                title: "房东直租", // 分享标题  
                                desc: "易租房,好生活,从这里开始", // 分享描述  
                                link: url, // 当前页面链接  
                                imgUrl: "https://home.link-bl.com/static/images/loginLogo.png", //分享图标                                
                                success: function() { //分享成功回调
                                    // console.log("分享成功");
                                },
                                cancel: function() { //取消分享回调
                                    // console.log("取消分享");
                                }
                            });
                            //分享到朋友圈
                            wxshare.updateTimelineShareData({
                                title: "房东直租", // 分享标题
                                desc: "易租房,好生活,从这里开始", // 分享描述  
                                link: url, // 当前页面链接  
                                imgUrl: "https://home.link-bl.com/static/images/loginLogo.png", // 分享图标                     
                                success: function() {
                                    // console.log("分享成功");
                                },
                                cancel: function() {
                                    // console.log("取消分享");
                                }
                            });
                        })
                    }

                });
            }
            // #endif
        },
        methods: {

        }
    }
</script>

<style>
    /*每个页面公共css */
</style>

3. 写一个混入方法   全局混入  穿件一个文件夹mixins 和pages平级 ,再创建一个share.js文件

 

// share.js
export const share = {
    onShow() {
        // console.log("全局混入");
        // #ifdef H5
        let pages = []
        pages = getCurrentPages();
        if (pages.length > 0) {
            // console.log(pages[pages.length - 1].route, 'pages全局混入');
            if (pages[pages.length - 1].route != 'pages/houseDetail/houseDetail') {
                var redirect_link = pages[pages.length - 1].route;
                this.setWxShare(redirect_link) // 分享传入参数
            }
        }

        // #endif
    },
    created() {

    },
}

 4. 在main.js文件中引入

// 引入全局分享
import {
    share
} from './mixins/share/share.js'
Vue.mixin(share)

最后大功告成! 

相关文章:

微信公众号h5写一个全局调用微信分享功能

1. 首先先安装依赖 npm install weixin-js-sdk --save 2. app.vue文件 <script> export default { onLaunch: function(e) {}, onShow: function(e) { console.log(App Show页面初始); // 路由参数存缓存的 这是为了防止他…...

聊聊精益需求的产生过程

这是鼎叔的第七十八篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。本人新书《无测试组织-测试团队的敏捷转型》​​​​​​​​​​​​​​已出版&#xff…...

Linux - 还不懂 gdb 调试器?(调试软件)

前言 当前&#xff0c;我们可以使用 make/makefile 来程序化执行代码文件&#xff1b;可以使用 gcc/g 等编译器来编译代码&#xff1b;可以使用 vim 编辑器来编写代码&#xff1b;其实在 Linux 当中还有一个工具&#xff0c;可以实现调试工作&#xff0c;这个工具就是 -- gdb。…...

Linux:程序地址空间/虚拟地址等相关概念理解

文章目录 程序地址空间虚拟地址和物理地址地址的转换地址空间是什么&#xff1f; 程序地址空间 在C和C程序中&#xff0c;一直有一个观点是&#xff0c;程序中的各个变量等都会有一定的地址空间&#xff0c;因此才会有诸如取地址&#xff0c;通过地址访问等操作&#xff0c;那…...

Python之爬虫

目录 HTTP请求HTTP响应获得页面响应伪装用户访问打包数据爬取豆瓣top250 HTTP请求 HTTP&#xff1a;HypertextTransferProtcol 超文本传输协议 1、请求行 POST/user/info?new_usertrue HTTP/1.1#资源了路径user/info 查询参数new_usertrue 协议版本HTTP/1.1 2、请求头 Ho…...

打造自己的前端组件库(奶妈版,超详细)

打造自己的前端组件库 demo是开源的&#xff0c;自己上npm 或者 github 上都能搜到 新建vue项目(sass js vue2) vue create yt-ui 修改文件目录(如下) 修改&#xff1a; 1.src 更名 examples; 2. src/components移动到项目最外层&#xff1b;3.vue.config.js更改入口文件 /…...

6.调制阶数相关

1、调制阶数与峰均比的关系 调制阶数&#xff08;modulation order&#xff09;对峰均比&#xff08;有一定的影响。 峰均比是用于衡量调制信号或波形在幅度上的动态范围的指标。它表示信号的最大峰值与平均功率之间的比值。较高的峰均比可能导致信号在传输或放大过程中出现过…...

Maven多模块管理(转载)

注意&#xff1a;父模块需设定打包方式为pom https://cloud.tencent.com/developer/article/1667275 dependencyManagement 统一管理子类依赖版本 在父类maven中加入&#xff0c;不会继承给子类&#xff0c;只能规定子类的依赖版本&#xff0c;子类加入dependence后无需写入 …...

运维学习CentOS 7进行Nightingale二进制部署

.因为Nightingale需要MySQL保存一些数据&#xff0c;所以可以参考《CentOS 7.6使用mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar安装Mysql 8.0》部署MySQL。 https://github.com/ccfos/nightingale/releases是可以github上下载Nightingale二进制安装包。 https://n9e.github.io/…...

安装Docker

本安装教程参考Docker官方文档&#xff0c;地址如下&#xff1a;https://docs.docker.com/engine/install/centos/ 卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \ docker-client \ docker-client-latest \ docker-common…...

【uniapp/uView】解决消息提示框悬浮在下拉框之上

需要实现这样的效果&#xff0c;即 toast 消息提示框在 popup 下拉框之上&#xff1a; 解决方法&#xff0c;把 <u-toast ref"uToast" /> 放在 u-popup 里面即可&#xff0c;这样就可以提升 toast 的优先级&#xff1a; <!-- 弹出下拉框 --><u-popu…...

有效管理token,充分发挥ChatGPT的能力

目录 给提供了 Token 的计算工具,来理解一下Token的计算方式,网址如下: 窗口如下: 实际消耗 Token 数量为 59个,换算之后为2.1-2.2的比例,即一个汉字消耗2.12.2个Token, 再测一下英文的Token消耗,包含空格在内,一共52个英文字母,消耗Token 13个,正好对应13个单词,…...

Python —— 验证码的处理执行JavaScript语句

1、验证码的处理 1、概述&绕过验证码的方案 很多的网站都在登录页面加入了识别文字&#xff0c;识别图片&#xff0c;拖动拼图的验证码方式来防止爬虫、恶意注册 等&#xff0c;如果是做自动化&#xff0c;需要绕过验证码才能进入下一步操作&#xff0c;那么有4种方案可以…...

MS12_020 3389远程溢出漏洞

1.search ms12_020 搜索ms12_020 2.use auxiliary/scanner/rdp/ms12_020_check 检查是否存在ms12_020漏洞 show options 查看所需参数 set RHOSTS x.x.x.x 设置目标IP地址 run 执行 检测出来有Ms12_020漏洞 3.use auxiliary/dos/windows/rdp/ms12_020_maxchannelids 选择…...

Pytorch ddp切换forward函数 验证ddp是否生效

DDP及其在pytorch中应用 ddp默认调用forward函数&#xff0c;有些模型无法使用forward函数&#xff0c;可以对模型包装一下。 class modelWraper(nn.Module):def __init__(self, model):super().__init__()self.model modeldef forward(self, *args, **kwargs):return self.…...

C++中按引用向函数传递参数

C中按引用向函数传递参数 在参数传递过程中&#xff0c;如果实参与引用参数不匹配&#xff0c;C将生成临时变量。当前&#xff0c;仅当参数为 const 引用时&#xff0c;C才允许这么做&#xff0c;但以前不 是这样。如果引用参数是 const&#xff0c;则编译器将在下面两种情况…...

【Asp.net】Asp.net core中IIS配置注意事项

1、应用地址池设为无托管代码 一、提示&#xff1a;关于IIS上运行ASP.NET Core 站点的“HTTP 500.19”错误 安装dotnet-hosting-3.1.2-win.exe ASP.NET Core 3.1 Runtime (v3.1.2)下载地址&#xff1a; https://download.visualstudio.microsoft.com/download/pr/dd119832-dc4…...

Redis实现附近商户

GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xf…...

【COMP305 LEC 3 LEC 4】

LEC 3 A basic abstract model for a biological neuron 1. Weights of connections Neuron gets fired if it has received from the presynaptic neurons 突触前神经元 a summary impulse 脉冲, which is above a certain threshold. Signal from a single synapse突触 ma…...

国密https访问

前言 现在的SSL的加密算法实际上主要是国际算法&#xff0c;包括JDK&#xff0c;Go等语言也仅支持国际算法加密&#xff08;毕竟是国外开源项目&#xff09;&#xff0c;hash。随着国密算法的普及&#xff0c;比如openssl就支持国密了&#xff0c;还要新版本的Linux内核也开始…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...