H5页面在微信中如何禁止分享给好友和朋友圈?

在H5页面中禁止微信分享给好友和朋友圈,需要通过微信JS-SDK实现。 由于微信官方已经不再支持直接通过meta标签的方式禁用分享,必须通过JS-SDK的wx.hideMenuItemswx.hideAllNonBaseMenuItem接口来实现。

以下是具体的步骤:

  1. 引入微信JS-SDK:
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

(建议使用最新版本的JS-SDK)

  1. 配置微信JS-SDK:

你需要通过后端接口获取签名等配置信息。后端需要使用你的AppID和AppSecret调用微信接口获取access_token,然后使用access_token获取jsapi_ticket,最后根据jsapi_ticket、当前页面的URL以及其他参数计算签名。

前端JS代码示例:

wx.config({
  debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时有效。
  appId: '你的AppId', // 必填,公众号的唯一标识
  timestamp: '时间戳', // 必填,生成签名的时间戳
  nonceStr: '随机字符串', // 必填,生成签名的随机串
  signature: '签名',// 必填,签名,见附录1
  jsApiList: ['hideMenuItems', 'hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
  1. 处理wx.config的回调:

wx.config的回调函数中,调用wx.ready来确保配置成功后才执行隐藏菜单的逻辑。

wx.config({
  // ... (config parameters)
});

wx.ready(function () {
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
  wx.hideMenuItems({
      menuList: [
          'menuItem:share:appMessage', // 分享给朋友
          'menuItem:share:timeline',   // 分享到朋友圈
          'menuItem:share:qq',        // 分享到QQ
          'menuItem:share:weiboApp',   // 分享到微博
          'menuItem:favorite',        // 收藏
          'menuItem:share:QZone'      // 分享到QQ空间
      ],
      success: function (res) {
          // alert('已隐藏菜单项');
      },
      fail: function (res) {
          // alert('隐藏菜单项失败:' + JSON.stringify(res));
      }
  });

// 或者隐藏所有非基础按钮
// wx.hideAllNonBaseMenuItem({
//     success: function (res) {
//         // alert('已隐藏所有非基础按钮');
//     },
//     fail:function(res){
//       // alert('隐藏所有非基础按钮失败:' + JSON.stringify(res));
//     }
// });


});

wx.error(function(res){
  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

  // alert("配置失败:" + JSON.stringify(res));
});

关键点和注意事项:

  • 签名算法: 签名算法比较复杂,建议使用后端语言提供的SDK来生成签名,避免出错。
  • URL: wx.config 中的 url 参数必须与当前页面的URL完全一致,包括参数,但不包括#后面的部分。 获取url的最佳实践是使用 location.href.split('#')[0]
  • JS接口列表: jsApiList 参数必须包含你将要使用的所有JS接口,否则调用会失败。
  • 测试: 在微信开发者工具中测试,并最终在真实的微信环境中验证功能。
  • hideMenuItemshideAllNonBaseMenuItem 的区别: hideMenuItems 可以选择性地隐藏某些菜单项,而 hideAllNonBaseMenuItem 会隐藏所有非基础菜单项,包括分享
posted @ 2024-12-11 09:16  王铁柱6  阅读(557)  评论(0)    收藏  举报