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 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
页面右下角弹出提示框示例代码js版
Aug 02 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
KnockoutJs快速入门教程
May 16 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
JS+jQuery实现注册信息的验证功能
Sep 26 jQuery
Vue scoped及deep使用方法解析
Aug 01 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
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
你应该知道的python列表去重方法
2017/01/17 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
linux下进程间通信的方式
2014/12/23 面试题
十佳教师事迹材料
2014/01/11 职场文书
优秀求职信范文分享
2014/01/26 职场文书
鸦片战争观后感
2015/06/09 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技