js实现微信分享代码


Posted in Javascript onOctober 11, 2020

通常自己做的一个页面想通过微信像朋友分享时,展示的标题和描述都是不是自己想要的,自己查了一些资料,原来是通过js来进行控制
展示效果如下:

js实现微信分享代码

js实现微信分享代码

标题、描述、还有分享的图片都是有js来控制的。
js代码如下

<script>
 var dataForWeixin = {
 appId: "",
 MsgImg: "Christmas/201012189457639.gif",//显示图片
 TLImg: "Christmas/201012189457639.gif",//显示图片
 url: "Christmas/6.html?stra=!u738B!u4F1F",//跳转地址
 title: "将我的思念和祝福送给您,颐养源祝大家圣诞快乐",//标题内容
 desc: "将我的思念和祝福送给您,颐养源祝大家圣诞快乐",//描述内容
 fakeid: "",
 callback: function () { }
 };
 (function () {
 var onBridgeReady = function () {
 WeixinJSBridge.on('menu:share:appmessage', function (argv) {
  WeixinJSBridge.invoke('sendAppMessage', {
  "appid": dataForWeixin.appId,
  "img_url": dataForWeixin.MsgImg,
  "img_width": "120",
  "img_height": "120",
  "link": dataForWeixin.url,
  "desc": dataForWeixin.desc,
  "title": dataForWeixin.title
  }, function (res) { (dataForWeixin.callback)(); });
 });
 WeixinJSBridge.on('menu:share:timeline', function (argv) {
  (dataForWeixin.callback)();
  WeixinJSBridge.invoke('shareTimeline', {
  "img_url": dataForWeixin.TLImg,
  "img_width": "120",
  "img_height": "120",
  "link": dataForWeixin.url,
  "desc": dataForWeixin.desc,
  "title": dataForWeixin.title
  }, function (res) { });
 });
 WeixinJSBridge.on('menu:share:weibo', function (argv) {
  WeixinJSBridge.invoke('shareWeibo', {
  "content": dataForWeixin.title,
  "url": dataForWeixin.url
  }, function (res) { (dataForWeixin.callback)(); });
 });
 WeixinJSBridge.on('menu:share:facebook', function (argv) {
  (dataForWeixin.callback)();
  WeixinJSBridge.invoke('shareFB', {
  "img_url": dataForWeixin.TLImg,
  "img_width": "120",
  "img_height": "120",
  "link": dataForWeixin.url,
  "desc": dataForWeixin.desc,
  "title": dataForWeixin.title
  }, function (res) { });
 });
 };
 
 if (document.addEventListener) {
 document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
 } else if (document.attachEvent) {
 document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
 document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
 }
 })();
</script>

另一个微信分享js代码:

/**!
 * 微信内置浏览器的Javascript API,功能包括:
 *
 * 1、分享到微信朋友圈
 * 2、分享给微信好友
 * 3、分享到腾讯微博
 * 4、新的分享接口,包含朋友圈、好友、微博的分享(for iOS)
 * 5、隐藏/显示右上角的菜单入口
 * 6、隐藏/显示底部浏览器工具栏
 * 7、获取当前的网络状态
 * 8、调起微信客户端的图片播放组件
 * 9、关闭公众平台Web页面
 */
var WeixinApi = (function () {

 "use strict";

 /**
 * 分享到微信朋友圈
 * @param {Object} data 待分享的信息
 * @p-config {String} appId 公众平台的appId(服务号可用)
 * @p-config {String} imgUrl 图片地址
 * @p-config {String} link 链接地址
 * @p-config {String} desc 描述
 * @p-config {String} title 分享的标题
 *
 * @param {Object} callbacks 相关回调方法
 * @p-config {Boolean} async  ready方法是否需要异步执行,默认false
 * @p-config {Function} ready(argv) 就绪状态
 * @p-config {Function} dataLoaded(data) 数据加载完成后调用,async为true时有用,也可以为空
 * @p-config {Function} cancel(resp) 取消
 * @p-config {Function} fail(resp) 失败
 * @p-config {Function} confirm(resp) 成功
 * @p-config {Function} all(resp) 无论成功失败都会执行的回调
 */
 function weixinShareTimeline(data, callbacks) {
 callbacks = callbacks || {};
 var shareTimeline = function (theData) {
 WeixinJSBridge.invoke('shareTimeline', {
 "appid":theData.appId ? theData.appId : '',
 "img_url":theData.imgUrl,
 "link":theData.link,
 "desc":theData.title,
 "title":theData.desc, // 注意这里要分享出去的内容是desc
 "img_width":"640",
 "img_height":"640"
 }, function (resp) {
 switch (resp.err_msg) {
  // share_timeline:cancel 用户取消
  case 'share_timeline:cancel':
  callbacks.cancel && callbacks.cancel(resp);
  break;
  // share_timeline:confirm 发送成功
  case 'share_timeline:confirm':
  case 'share_timeline:ok':
  callbacks.confirm && callbacks.confirm(resp);
  break;
  // share_timeline:fail 发送失败
  case 'share_timeline:fail':
  default:
  callbacks.fail && callbacks.fail(resp);
  break;
 }
 // 无论成功失败都会执行的回调
 callbacks.all && callbacks.all(resp);
 });
 };
 WeixinJSBridge.on('menu:share:timeline', function (argv) {
 if (callbacks.async && callbacks.ready) {
 window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();
 if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {
  window["_wx_loadedCb_"] = new Function();
 }
 callbacks.dataLoaded = function (newData) {
  window["_wx_loadedCb_"](newData);
  shareTimeline(newData);
 };
 // 然后就绪
 callbacks.ready && callbacks.ready(argv);
 } else {
 // 就绪状态
 callbacks.ready && callbacks.ready(argv);
 shareTimeline(data);
 }
 });
 }

 /**
 * 发送给微信上的好友
 * @param {Object} data 待分享的信息
 * @p-config {String} appId 公众平台的appId(服务号可用)
 * @p-config {String} imgUrl 图片地址
 * @p-config {String} link 链接地址
 * @p-config {String} desc 描述
 * @p-config {String} title 分享的标题
 *
 * @param {Object} callbacks 相关回调方法
 * @p-config {Boolean} async  ready方法是否需要异步执行,默认false
 * @p-config {Function} ready(argv) 就绪状态
 * @p-config {Function} dataLoaded(data) 数据加载完成后调用,async为true时有用,也可以为空
 * @p-config {Function} cancel(resp) 取消
 * @p-config {Function} fail(resp) 失败
 * @p-config {Function} confirm(resp) 成功
 * @p-config {Function} all(resp) 无论成功失败都会执行的回调
 */
 function weixinSendAppMessage(data, callbacks) {
 callbacks = callbacks || {};
 var sendAppMessage = function (theData) {
 WeixinJSBridge.invoke('sendAppMessage', {
 "appid":theData.appId ? theData.appId : '',
 "img_url":theData.imgUrl,
 "link":theData.link,
 "desc":theData.desc,
 "title":theData.title,
 "img_width":"640",
 "img_height":"640"
 }, function (resp) {
 switch (resp.err_msg) {
  // send_app_msg:cancel 用户取消
  case 'send_app_msg:cancel':
  callbacks.cancel && callbacks.cancel(resp);
  break;
  // send_app_msg:confirm 发送成功
  case 'send_app_msg:confirm':
  case 'send_app_msg:ok':
  callbacks.confirm && callbacks.confirm(resp);
  break;
  // send_app_msg:fail 发送失败
  case 'send_app_msg:fail':
  default:
  callbacks.fail && callbacks.fail(resp);
  break;
 }
 // 无论成功失败都会执行的回调
 callbacks.all && callbacks.all(resp);
 });
 };
 WeixinJSBridge.on('menu:share:appmessage', function (argv) {
 if (callbacks.async && callbacks.ready) {
 window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();
 if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {
  window["_wx_loadedCb_"] = new Function();
 }
 callbacks.dataLoaded = function (newData) {
  window["_wx_loadedCb_"](newData);
  sendAppMessage(newData);
 };
 // 然后就绪
 callbacks.ready && callbacks.ready(argv);
 } else {
 // 就绪状态
 callbacks.ready && callbacks.ready(argv);
 sendAppMessage(data);
 }
 });
 }

 /**
 * 分享到腾讯微博
 * @param {Object} data 待分享的信息
 * @p-config {String} link 链接地址
 * @p-config {String} desc 描述
 *
 * @param {Object} callbacks 相关回调方法
 * @p-config {Boolean} async  ready方法是否需要异步执行,默认false
 * @p-config {Function} ready(argv) 就绪状态
 * @p-config {Function} dataLoaded(data) 数据加载完成后调用,async为true时有用,也可以为空
 * @p-config {Function} cancel(resp) 取消
 * @p-config {Function} fail(resp) 失败
 * @p-config {Function} confirm(resp) 成功
 * @p-config {Function} all(resp) 无论成功失败都会执行的回调
 */
 function weixinShareWeibo(data, callbacks) {
 callbacks = callbacks || {};
 var shareWeibo = function (theData) {
 WeixinJSBridge.invoke('shareWeibo', {
 "content":theData.desc,
 "url":theData.link
 }, function (resp) {
 switch (resp.err_msg) {
  // share_weibo:cancel 用户取消
  case 'share_weibo:cancel':
  callbacks.cancel && callbacks.cancel(resp);
  break;
  // share_weibo:confirm 发送成功
  case 'share_weibo:confirm':
  case 'share_weibo:ok':
  callbacks.confirm && callbacks.confirm(resp);
  break;
  // share_weibo:fail 发送失败
  case 'share_weibo:fail':
  default:
  callbacks.fail && callbacks.fail(resp);
  break;
 }
 // 无论成功失败都会执行的回调
 callbacks.all && callbacks.all(resp);
 });
 };
 WeixinJSBridge.on('menu:share:weibo', function (argv) {
 if (callbacks.async && callbacks.ready) {
 window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();
 if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {
  window["_wx_loadedCb_"] = new Function();
 }
 callbacks.dataLoaded = function (newData) {
  window["_wx_loadedCb_"](newData);
  shareWeibo(newData);
 };
 // 然后就绪
 callbacks.ready && callbacks.ready(argv);
 } else {
 // 就绪状态
 callbacks.ready && callbacks.ready(argv);
 shareWeibo(data);
 }
 });
 }


 /**
 * 新的分享接口
 * @param {Object} data 待分享的信息
 * @p-config {String} appId 公众平台的appId(服务号可用)
 * @p-config {String} imgUrl 图片地址
 * @p-config {String} link 链接地址
 * @p-config {String} desc 描述
 * @p-config {String} title 分享的标题
 *
 * @param {Object} callbacks 相关回调方法
 * @p-config {Boolean} async  ready方法是否需要异步执行,默认false
 * @p-config {Function} ready(argv,shareTo) 就绪状态
 * @p-config {Function} dataLoaded(data) 数据加载完成后调用,async为true时有用,也可以为空
 * @p-config {Function} cancel(resp,shareTo) 取消
 * @p-config {Function} fail(resp,shareTo) 失败
 * @p-config {Function} confirm(resp,shareTo) 成功
 * @p-config {Function} all(resp,shareTo) 无论成功失败都会执行的回调
 */
 function weixinGeneralShare(data, callbacks) {
 callbacks = callbacks || {};
 var generalShare = function (general,theData) {

 // 如果是分享到朋友圈,则需要把title和desc交换一下
 if(general.shareTo == 'timeline') {
 var title = theData.title;
 theData.title = theData.desc || title;
 theData.desc = title;
 }

 // 分享出去
 general.generalShare({
 "appid":theData.appId ? theData.appId : '',
 "img_url":theData.imgUrl,
 "link":theData.link,
 "desc":theData.desc,
 "title":theData.title,
 "img_width":"640",
 "img_height":"640"
 }, function (resp) {
 switch (resp.err_msg) {
  // general_share:cancel 用户取消
  case 'general_share:cancel':
  callbacks.cancel && callbacks.cancel(resp ,general.shareTo);
  break;
  // general_share:confirm 发送成功
  case 'general_share:confirm':
  case 'general_share:ok':
  callbacks.confirm && callbacks.confirm(resp ,general.shareTo);
  break;
  // general_share:fail 发送失败
  case 'general_share:fail':
  default:
  callbacks.fail && callbacks.fail(resp ,general.shareTo);
  break;
 }
 // 无论成功失败都会执行的回调
 callbacks.all && callbacks.all(resp ,general.shareTo);
 });
 };
 WeixinJSBridge.on('menu:general:share', function (general) {
 if (callbacks.async && callbacks.ready) {
 window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();
 if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {
  window["_wx_loadedCb_"] = new Function();
 }
 callbacks.dataLoaded = function (newData) {
  window["_wx_loadedCb_"](newData);
  generalShare(general,newData);
 };
 // 然后就绪
 callbacks.ready && callbacks.ready(general,general.shareTo);
 } else {
 // 就绪状态
 callbacks.ready && callbacks.ready(general,general.shareTo);
 generalShare(general,data);
 }
 });
 }

 /**
 * 加关注(此功能只是暂时先加上,不过因为权限限制问题,不能用,如果你的站点是部署在*.qq.com下,也许可行)
 * @param {String} appWeixinId 微信公众号ID
 * @param {Object} callbacks 回调方法
 * @p-config {Function} fail(resp) 失败
 * @p-config {Function} confirm(resp) 成功
 */
 function addContact(appWeixinId,callbacks){
 callbacks = callbacks || {};
 WeixinJSBridge.invoke("addContact", {
 webtype: "1",
 username: appWeixinId
 }, function (resp) {
 var success = !resp.err_msg || "add_contact:ok" == resp.err_msg || "add_contact:added" == resp.err_msg;
 if(success) {
 callbacks.success && callbacks.success(resp);
 }else{
 callbacks.fail && callbacks.fail(resp);
 }
 })
 }

 /**
 * 调起微信Native的图片播放组件。
 * 这里必须对参数进行强检测,如果参数不合法,直接会导致微信客户端crash
 *
 * @param {String} curSrc 当前播放的图片地址
 * @param {Array} srcList 图片地址列表
 */
 function imagePreview(curSrc,srcList) {
 if(!curSrc || !srcList || srcList.length == 0) {
 return;
 }
 WeixinJSBridge.invoke('imagePreview', {
 'current' : curSrc,
 'urls' : srcList
 });
 }

 /**
 * 显示网页右上角的按钮
 */
 function showOptionMenu() {
 WeixinJSBridge.call('showOptionMenu');
 }


 /**
 * 隐藏网页右上角的按钮
 */
 function hideOptionMenu() {
 WeixinJSBridge.call('hideOptionMenu');
 }

 /**
 * 显示底部工具栏
 */
 function showToolbar() {
 WeixinJSBridge.call('showToolbar');
 }

 /**
 * 隐藏底部工具栏
 */
 function hideToolbar() {
 WeixinJSBridge.call('hideToolbar');
 }

 /**
 * 返回如下几种类型:
 *
 * network_type:wifi wifi网络
 * network_type:edge 非wifi,包含3G/2G
 * network_type:fail 网络断开连接
 * network_type:wwan 2g或者3g
 *
 * 使用方法:
 * WeixinApi.getNetworkType(function(networkType){
 *
 * });
 *
 * @param callback
 */
 function getNetworkType(callback) {
 if (callback && typeof callback == 'function') {
 WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
 // 在这里拿到e.err_msg,这里面就包含了所有的网络类型
 callback(e.err_msg);
 });
 }
 }

 /**
 * 关闭当前微信公众平台页面
 */
 function closeWindow() {
 WeixinJSBridge.call("closeWindow");
 }

 /**
 * 当页面加载完毕后执行,使用方法:
 * WeixinApi.ready(function(Api){
 * // 从这里只用Api即是WeixinApi
 * });
 * @param readyCallback
 */
 function wxJsBridgeReady(readyCallback) {
 if (readyCallback && typeof readyCallback == 'function') {
 var Api = this;
 var wxReadyFunc = function () {
 readyCallback(Api);
 };
 if (typeof window.WeixinJSBridge == "undefined"){
 if (document.addEventListener) {
  document.addEventListener('WeixinJSBridgeReady', wxReadyFunc, false);
 } else if (document.attachEvent) {
  document.attachEvent('WeixinJSBridgeReady', wxReadyFunc);
  document.attachEvent('onWeixinJSBridgeReady', wxReadyFunc);
 }
 }else{
 wxReadyFunc();
 }
 }
 }

 return {
 version :"2.0",
 ready :wxJsBridgeReady,
 shareToTimeline :weixinShareTimeline,
 shareToWeibo :weixinShareWeibo,
 shareToFriend :weixinSendAppMessage,
 generalShare :weixinGeneralShare,
 addContact :addContact,
 showOptionMenu :showOptionMenu,
 hideOptionMenu :hideOptionMenu,
 showToolbar :showToolbar,
 hideToolbar :hideToolbar,
 getNetworkType :getNetworkType,
 imagePreview :imagePreview,
 closeWindow :closeWindow
 };
})();

本文已被整理到了《JavaScript微信开发技巧汇总》,欢迎大家学习阅读。

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是微信分享js代码,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js导航栏单击事件背景变换示例代码
Jan 13 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
JavaScript用select实现日期控件
Jul 17 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
js性能优化技巧
Nov 29 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
vue路由中前进后退的一些事儿
May 18 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
Nov 17 Javascript
vue $router和$route的区别详解
Dec 02 Vue.js
JavaScript观察者模式(经典)
Dec 09 #Javascript
常用的Javascript设计模式小结
Dec 09 #Javascript
JS实现字符串转日期并比较大小实例分析
Dec 09 #Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 #Javascript
详解JavaScript基本类型和引用类型
Dec 09 #Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 #Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 #Javascript
You might like
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
一个用php3编写的简单计数器
2006/10/09 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
js实现文字截断功能
2016/09/14 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
人事助理岗位职责
2013/11/18 职场文书
投标单位介绍信
2014/01/09 职场文书
项目施工员岗位职责
2014/03/09 职场文书
政风行风建设责任书
2014/07/23 职场文书
2014年采购员工作总结
2014/11/18 职场文书
认真学习保证书
2015/02/26 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
夏洛特的网观后感
2015/06/15 职场文书
小学运动会加油词
2015/07/18 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript