和腾讯合作的项目活动中腾讯要求我们必须隐藏朋友圈分享功能,一直以为没有官方Api,百般查找才在文档中找到,可能是自己不太细心。
微信官方文档在jsjdk的"界面操作"中有详细说明:
关闭当前网页窗口接口
wx.closeWindow();
批量隐藏功能按钮接口
wx.hideMenuItems({
menuList: [] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
});
批量显示功能按钮接口
wx.showMenuItems({
menuList: [] // 要显示的菜单项,所有menu项见附录3
});
隐藏所有非基础按钮接口
wx.hideAllNonBaseMenuItem();
// “基本类”按钮详见附录3
显示所有功能按钮接口
wx.showAllNonBaseMenuItem();
通过jsjdk我的代码是这样的:
wx.hideMenuItems({ menuList: ["menuItem:share:timeline", "menuItem:copyUrl", "menuItem:share:appMessage", "menuItem:share:qq", "menuItem:share:weiboApp", "menuItem:favorite", "menuItem:share:facebook", "menuItem:share:QZone", "menuItem:editTag", "menuItem:delete", "menuItem:copyUrl", "menuItem:originPage", "menuItem:readMode", "menuItem:openWithQQBrowser", "menuItem:openWithSafari", "menuItem:share:email", "menuItem:share:brand"] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮 });
以上代码中我隐藏了很多选项,例如timeline是朋友圈的意思。
另外一种方式是不需要微信Jsjdk支持的,内置微信浏览器的方法(但是全部都会隐藏):
function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu'); } if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { onBridgeReady(); }
以上方式在安卓中会非常完美,但是在ios系统中如果再次返回当前页面则出现了失效的问题,必须刷新才行。我通过页面监听返回事件来再次刷新页面或者重新执行jsjdk,但是部分页面不是我们的url。于是同事建议在页面使用定时器持续的进行jsjdk设置。由于是永久循环执行定时器,就算页面不刷新再次返回依然有效。一定要注意定时器执行的是wx.ready后的方法。例如上面的第二种方式只需要持续执行WeixinJSBridge.call('hideOptionMenu');