当前位置:首页 > 技术 > 正文内容

微信H5页面自定义分享内容与HTTPS logo兼容性解决方案

访客 技术 2026年6月19日 1
// 微信分享功能配置模块
const WeChatShare = {
    // 默认分享参数
    defaultConfig: {
        title: '活动报名入口',
        description: '为每位学员提供个性化学习方案,多种价格选择,现在报名可获赠课程!',
        imageUrl: '',
        shareUrl: ''
    },
    
    // 初始化微信分享
    init: function(customConfig = {}) {
        // 合并用户配置与默认配置
        const shareConfig = this.mergeConfig(this.defaultConfig, customConfig);
        
        // 获取微信JS-SDK配置
        this.fetchWeChatConfig().then(config => {
            this.setupWeChatSDK(config, shareConfig);
        });
    },
    
    // 合并配置对象
    mergeConfig: function(defaultConfig, userConfig) {
        return {
            title: userConfig.title || defaultConfig.title,
            description: userConfig.description || defaultConfig.description,
            imageUrl: userConfig.imageUrl || defaultConfig.imageUrl,
            shareUrl: userConfig.shareUrl || defaultConfig.shareUrl
        };
    },
    
    // 获取微信JS-SDK配置参数
    fetchWeChatConfig: function() {
        const currentUrl = window.location.href.split('#')[0];
        return $.ajax({
            url: '/rest/getJssdkTicket',
            method: 'GET',
            dataType: 'json',
            data: { url: encodeURIComponent(currentUrl) }
        });
    },
    
    // 配置微信JS-SDK
    setupWeChatSDK: function(wechatData, shareConfig) {
        wx.config({
            appId: wechatData.appId,
            timestamp: wechatData.timestamp,
            nonceStr: wechatData.nonceStr,
            signature: wechatData.signature,
            jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
        });
        
        wx.ready(() => {
            this.configureTimelineShare(shareConfig);
            this.configureAppMessageShare(shareConfig);
        });
    },
    
    // 配置朋友圈分享
    configureTimelineShare: function(config) {
        wx.onMenuShareTimeline({
            title: config.title,
            link: this.ensureHttpsUrl(config.shareUrl),
            imgUrl: this.resolveImageUrl(config.imageUrl),
            success: () => console.log('朋友圈分享成功'),
            cancel: () => console.log('用户取消分享')
        });
    },
    
    // 配置好友分享
    configureAppMessageShare: function(config) {
        wx.onMenuShareAppMessage({
            title: config.title,
            desc: config.description,
            link: this.ensureHttpsUrl(config.shareUrl),
            imgUrl: this.resolveImageUrl(config.imageUrl),
            type: 'link',
            dataUrl: '',
            success: () => console.log('好友分享成功'),
            cancel: () => console.log('用户取消分享')
        });
    },
    
    // 确保URL使用HTTPS协议
    ensureHttpsUrl: function(url) {
        if (!url) {
            return window.location.href.split('#')[0];
        }
        return url.startsWith('https://') ? url : 'https://' + url.replace(/^https?:\/\//, '');
    },
    
    // 处理图片URL,解决HTTPS兼容性问题
    resolveImageUrl: function(url) {
        if (!url) {
            const origin = window.location.origin;
            return `${origin}/assets/images/default-share-logo.jpg`;
        }
        
        // 如果是相对路径,转换为绝对路径并确保HTTPS
        if (!url.startsWith('http')) {
            const origin = window.location.origin;
            return `${origin}/${url}`;
        }
        
        // 确保图片URL使用HTTPS
        return url.startsWith('https://') ? url : url.replace('http://', 'https://');
    }
};

// 使用示例
const customShareSettings = {
    title: '推荐优质教育平台给孩子试试!',
    description: '全国已有超过3000万学员选择的在线教育平台。',
    imageUrl: '/assets/images/wechat-share-logo.png',
    shareUrl: '/promotion/educational-program.html'
};

// 初始化微信分享功能
WeChatShare.init(customShareSettings);
<!-- 在HTML页面中引入微信JS-SDK -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

<!-- 确保在页面加载完成后初始化分享功能 -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 如果没有提供自定义分享配置,将使用默认配置
    WeChatShare.init();
});
</script>

注意事项:

  1. 确保已在微信公众平台配置JS接口安全域名
  2. 图片URL必须使用HTTPS协议,否则在iOS设备上可能无法显示
  3. 分享链接必须与当前页面的域名一致,或已在公众号后台配置为安全域名
  4. 服务器端需要实现获取ticket的接口,用于生成签名
  5. 分享回调函数可以根据业务需求添加更多逻辑

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。