朋友圈、浏览器分享实现

朋友圈、浏览器分享实现

/** * mshare.js * 此插件主要作用是在UC和QQ两个主流浏览器 * 上面触发微信分享到朋友圈或发送给朋友的功能 * 代码编写过程中 参考: * http://mjs.sinaimg.cn/wap/module/share/201501261608/js/addShare.js * 此外,JefferyWang的项目对我也有一定启示: * https://github.com/JefferyWang/nativeShare.js * * @revisor angusfu1126@qq.com * @date 2015-07-22 */ !(function(global) { 'use strict'; var UA, uc, qq, wx, tc, qqVs, ucVs, os,qqBridgeDone; UA = navigator.appVersion; // 是否是 UC 浏览器 uc = UA.split('UCBrowser/').length > 1 ? 1 : 0; // 判断 qq 浏览器 // 然而qq浏览器分高低版本 2代表高版本 1代表低版本 qq = UA.split('MQQBrowser/').length > 1 ? 2 : 0; // 是否是微信 wx = ((UA.match(/MicroMessenger/i)) && (UA.match(/MicroMessenger/i).toString().toLowerCase() == 'micromessenger')); // 浏览器版本 qqVs = qq ? parseFloat(UA.split('MQQBrowser/')[1]) : 0; ucVs = uc ? parseFloat(UA.split('UCBrowser/')[1]) : 0; //获取操作系统信息 iPhone(1) Android(2) os = (function () { var ua = navigator.userAgent; if (/iphone|ipod/i.test(ua)) { return 1; } else if(/android/i.test(ua)){ return 2; } else { return 0; } }()); // qq浏览器下面 是否加载好了相应的api文件 qqBridgeDone = false; // 进一步细化版本和平台判断 // 参考: https://github.com/JefferyWang/nativeShare.js // http://mjs.sinaimg.cn/wap/module/share/201501261608/js/addShare.js if ((qq && qqVs < 5.4 && os == 1) || (qq && qqVs < 5.3 && os == 1)) { qq = 0; } else { if (qq && qqVs < 5.4 && os == 2) { qq = 1; } else { if (uc && ( (ucVs < 10.2 && os == 1) || (ucVs < 9.7 && os == 2) )) { uc = 0; } } } /** * qq浏览器下面 根据不同版本 加载对应的bridge * @method loadqqApi * @param {Function} cb 回调函数 */ function loadqqApi(cb) { if (!qq) { // qq == 0  return cb && cb(); } var qqApiScript = document.createElement('script'); //需要等加载过qq的接口文档之后,再去初始化分享组件 qqApiScript.onload = function () {cb && cb();}; qqApiScript.onerror = function () {}; // qq == 1 低版本 // qq == 2 高版本 qqApiScript.src = (qq == 1 ) ? 'http://3gimg.qq.com/html5/js/qb.js' : 'http://jsapi.qq.com/get?api=app.share'; document.body.appendChild(qqApiScript); } /** * UC浏览器分享 * @method ucShare */ function ucShare(config) { // ['title', 'content', 'url', 'platform', 'disablePlatform', 'source', 'htmlID'] // 关于platform // ios: kWeixin || kWeixinFriend; // android: WechatFriends || WechatTimeline // uc 分享会直接使用截图 var platform = '', shareInfo; // 指定了分享类型 if (config.type) { if (os == 2) { platform = config.type == 1 ? 'WechatTimeline' : 'WechatFriends'; } else if (os == 1) { platform = config.type == 1 ? 'kWeixinFriend' : 'kWeixin'; } } shareInfo = [ config.title, config.desc, config.url, platform, '', '', '' ]; // android  if (window.ucweb) { ucweb.startRequest && ucweb.startRequest('shell.page_share', shareInfo); } // ios else if (window.ucbrowser) { ucbrowser.web_share && ucbrowser.web_share.apply(null, shareInfo); } }; /** * qq浏览器分享函数 * @method qqShare */ function qqShare(config) { var type = config.type; //微信好友1, 微信朋友圈8 type = type ? ((type == 1) ? 8 : 1) : ''; var share = function () { var shareInfo = { 'url': config.url, 'title': config.title, 'description': config.desc, 'img_url': config.img, 'img_title': config.title, 'to_app': type, 'cus_txt': '' }; if (window.browser) { browser.app && browser.app.share(shareInfo); } else if (window.qb) { qb.share && qb.share(shareInfo); } }; if (qqBridgeDone) { share(); } else { loadqqApi(share); } }; /** * 对外暴露的接口函数 * @method mShare * @param {Object} config 配置对象 参数见示例 * var config = { * title : 'Lorem ipsum dolor sit.' * , url : 'http://m.ly.com' * , desc : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat inventore minima voluptates.' * , img : 'http://img1.40017.cn/cn/s/c/2015/loading.gif' * , type : type // 1 ==> 朋友圈 2 ==> 朋友 0 ==> 直接弹出原生 * } */ function mShare(config) { this.check = function (succssFn, wxFn, failFn) { if (uc) { succssFn(); } else if (qq && !wx) { succssFn(); } else if (wx) { wxFn(); } else { failFn(); } } this.config = config; this.init = function (type) { if (typeof type != 'undefined') this.config.type = type; try { if (uc) { ucShare(this.config); } else if (qq && !wx) { qqShare(this.config); } } catch (e) {} } } // 预加载 qq bridge loadqqApi(function () { qqBridgeDone = true; }); // 方法暴露给全局变量 global.mShare = mShare; })(this); //=====================这是分割线===================================== <div class="sharePage"> <div class="sharePage_background"></div> <div class="sharePage_bottom"> <div class="share_mode"> <div class="share_mode_header">分享至</div> <div class="share_mode_content"> <ul class="clearfix"> <li class="WeChat mshare" mshare="2"> <span></span> <i>微信</i> </li> <li class="moments mshare" mshare="1"> <span></span> <i>朋友圈</i> </li> </ul> </div> </div> <div class="share_cancel"> 取消 </div> </div> <div class="sharePage_arrow"> <span></span> <p>点击微信右上角按钮进行分享</p> </div> </div> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script src="/mobile/js/lib/jquery-2.0.3.min.js"></script> <script src="/mobile/js/lib/mshare.js"></script> <script> var mshare = new mShare({ title : '{ {shareTitle}}', url : '{ {shareUrl}}', desc : '{ {shareDesc}}', img : '{ {sharePic}}' }); mshare.check( function () { //支持原生分享  browserShow (); $('.mshare').click(function () { // 1 ==> 朋友圈 2 ==> 朋友 0 ==> 直接弹出原生 mshare.init(+$(this).attr('mshare')); }); }, function () { //微信中支持微信分享  WeChatShow (); wx.config({ debug: false, appId: "{ {options['appid']}}", timestamp: "{ {options['timestamp']}}", nonceStr: "{ {options['nonceStr']}}", signature: "{ {options['signature']}}", jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function(){ wx.checkJsApi({ jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2, success: function(res) { //alert("检测结果" + res.errMsg); // 以键值对的形式返回,可用的api值true,不可用为false // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}  } }); wx.onMenuShareTimeline({ title: '{ {shareTitle}}', // 分享标题 link: '{ {shareUrl}}', // 分享链接 imgUrl: '{ {sharePic}}', // 分享图标 success: function () { //alert("分享到微信朋友圈成功"); // 用户确认分享后执行的回调函数 }, cancel: function () { //alert("取消分享"); // 用户取消分享后执行的回调函数  } }); wx.onMenuShareAppMessage({ title: '{ {shareTitle}}', // 分享标题 link: '{ {shareUrl}}', // 分享链接 imgUrl: '{ {sharePic}}', // 分享图标 desc: "{ {shareDesc}}", // 分享描述 type: 'link', // 分享类型,music、video或link,不填默认为link dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { //alert("分享到微信好友成功"); // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 //alert("取消分享")  } }); // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。  }); wx.error(function(res){ //alert('error'); // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。  }); }, function () { //不支持分享  shareHide(); } ); //在浏览器中打开 function browserShow () { //点击分享按钮 $('.share_button').show(); $('.share_button').click(function () { $('.sharePage').addClass('sharePage_active'); $('.sharePage_bottom').animate({ bottom:0 },300); }); //点击取消按钮 $('.share_cancel').click(function () { $('.sharePage_bottom').animate({ bottom:-$('.sharePage_bottom').height()+'px' },300,function () { $('.sharePage').removeClass('sharePage_active'); }); }); //点击黑色背景,整个分享页面消失 $('.sharePage_background').click(function () { $('.sharePage_bottom').animate({ bottom:-$('.sharePage_bottom').height()+'px' },300,function () { $('.sharePage').removeClass('sharePage_active'); }); }); } //在微信中打开 function WeChatShow () { //点击分享按钮 $('.share_button').show(); $('.share_button').click(function () { $('.sharePage').addClass('sharePage_active'); $('.sharePage_arrow').addClass('sharePage_arrow_active'); }); //点击黑色背景整个分享页面消失 $('.sharePage_arrow').click(function () { $('.sharePage').removeClass('sharePage_active'); $('.sharePage_arrow').removeClass('sharePage_arrow_active'); }); } function shareHide() { $('.share_button').hide(); } </script> 作者:beijing_beijing 链接:https://www.jianshu.com/p/3d6503c68474 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112862.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 小议如何使用APPLY

    小议如何使用APPLY

    2021年11月25日
  • 【Quartz】定时器初步实验(一)

    【Quartz】定时器初步实验(一)以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不。第一步:创建项目创建一个新项目,可以是ASP.NE

  • pytest fixtures_jig和fixture的区别

    pytest fixtures_jig和fixture的区别fixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

  • WaitForSingleObject_调用wait方法时,线程会放弃对象锁

    WaitForSingleObject_调用wait方法时,线程会放弃对象锁摘要在MicrosoftWindows平台上有几种以原子方式锁定代码和数据的不同方法。此白皮书的主要目的是向开发人员简要介绍Windows中进行锁定的不同方法以及与这些锁定有关的相应性能开销。因为未来架构将是多核架构,因此此信息非常适用。简介多线程软件应用对于提升英特尔内核架构的性能至关重要。锁定代码通常是多线程应用中运行最频繁的代码。确定要使用的锁定方法与确定应用中并行处理

  • debian系统版本查看_DEBIAN

    debian系统版本查看_DEBIANdebian官方默认只提供最新的版本下载,有时需要找一些旧的版本的debian,着实费用。下面这个debianiso镜像站可以下载各个版本的debian下载:debian系统各个版本ISO下载http://cdimage.debian.org/cdimage/archive/…

  • ER图(实体-联系图)「建议收藏」

    ER图(实体-联系图)「建议收藏」概念E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。构成ER图有实体(entity)、属性(attribute)、关系(relationship)三部分。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆框”表示实体的属性,将属性名记入框中;用”菱形框“表示实体型之间的关系,在菱形…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号