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 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
jQuery 解析xml文件
Aug 09 Javascript
Jquery插件之多图片异步上传
Oct 20 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
浅析return false的正确使用
Nov 04 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
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 图片上添加透明度渐变的效果
2009/06/29 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
学python安装的软件总结
2019/10/12 Python
Python解析json代码实例解析
2019/11/25 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
初级Java程序员面试题
2016/03/03 面试题
应聘护士自荐信
2013/10/21 职场文书
销售内勤岗位职责
2015/02/10 职场文书
小学校长开学致辞
2015/07/29 职场文书
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python