手机浏览器唤起微信分享(JS)


Posted in Javascript onOctober 11, 2020

最近在做一个手机站,要求点击分享可以直接打开微信分享出去。而不是jiathis,share分享这种的点击出来二维码。在网上看了很多,都说APP能唤起微信,手机网页实现不了。也找了很多都不能直接唤起微信。

总结出来一个可以直接唤起微信的。适应手机qq浏览器和uc浏览器。

下面上代码,把这些直接放到要转发的页面里就可以了:

html部分:

<script src="mshare.js"></script>//引进mshare.js
<button data-mshare="0">点击弹出原生分享面板</button>
<button data-mshare="1">点击触发朋友圈分享</button>
<button data-mshare="2">点击触发发送给微信朋友</button>

js部分:

<script>
var mshare = new mShare({
  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://placehold.it/150x150'
});
$('button').click(function () {
  // 1 ==> 朋友圈 2 ==> 朋友 0 ==> 直接弹出原生
  mshare.init(+$(this).data('mshare'));
});
</script>

下面是mshare.js的代码分享,把这些代码新建一个js文件放进去,然后在页面中引进就ok了。

/**
 * 此插件主要作用是在UC和QQ两个主流浏览器
 * 上面触发微信分享到朋友圈或发送给朋友的功能
 */
'use strict';
var UA = navigator.appVersion;
 
/**
 * 是否是 UC 浏览器
 */
var uc = UA.split('UCBrowser/').length > 1 ? 1 : 0;
 
/**
 * 判断 qq 浏览器
 * 然而qq浏览器分高低版本
 * 2 代表高版本
 * 1 代表低版本
 */
var qq = UA.split('MQQBrowser/').length > 1 ? 2 : 0;
 
/**
 * 是否是微信
 */
var wx = /micromessenger/i.test(UA);
 
/**
 * 浏览器版本
 */
var qqVs = qq ? parseFloat(UA.split('MQQBrowser/')[1]) : 0;
var ucVs = uc ? parseFloat(UA.split('UCBrowser/')[1]) : 0;
 
/**
 * 获取操作系统信息 iPhone(1) Android(2)
 */
var 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文件
 */
var qqBridgeLoaded = false;
 
// 进一步细化版本和平台判断
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) {
  // qq == 0 
  if (!qq) {
    return cb && cb();
  }
  var script = document.createElement('script');
  script.src = (+qq === 1) ? '//3gimg.qq.com/html5/js/qb.js' : '//jsapi.qq.com/get?api=app.share';
  /**
   * 需要等加载过 qq 的 bridge 脚本之后
   * 再去初始化分享组件
   */
  script.onload = function () {
    cb && cb();
  };
  document.body.appendChild(script);
}
/**
 * UC浏览器分享
 * @method ucShare
 */
function ucShare(config) {
  // ['title', 'content', 'url', 'platform', 'disablePlatform', 'source', 'htmlID']
  // 关于platform
  // ios: kWeixin || kWeixinFriend;
  // android: WechatFriends || WechatTimeline
  // uc 分享会直接使用截图
  var platform = '';
  var shareInfo = null;
  // 指定了分享类型
  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);
    return;
  }
  if (window.ucbrowser) {
    ucbrowser.web_share && ucbrowser.web_share.apply(null, shareInfo);
    return;
  }
}
/**
 * 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 (qqBridgeLoaded) {
    share();
  } else {
    loadqqApi(share);
  }
}
/**
 * 对外暴露的接口函数
 * @method mShare
 * @param {Object} config 配置对象
 */
function mShare(config) {
  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 () {
  qqBridgeLoaded = true;
});
if (typeof module === 'object' && module.exports) {
  module.exports = mShare;
} else {
  window.mShare = mShare;
}

好了,这样就可以直接唤起微信进行分享啦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript获取table中某一列的值的方法
May 06 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
js实现文本框输入文字个数限制代码
Dec 25 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
值得收藏的vuejs安装教程
Nov 21 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
Vue组件全局注册实现警告框的实例详解
Jun 11 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 Javascript
JS数据类型分类及常用判断方法
Nov 19 Javascript
js canvas实现俄罗斯方块
Oct 11 #Javascript
利用js canvas实现五子棋游戏
Oct 11 #Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 #Javascript
原生js生成图片验证码
Oct 11 #Javascript
js实现石头剪刀布游戏
Oct 11 #Javascript
js+h5 canvas实现图片验证码
Oct 11 #Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 #Javascript
You might like
php中$this-&amp;gt;含义分析
2009/11/29 PHP
php strcmp使用说明
2010/04/22 PHP
探讨php中header的用法详解
2013/06/07 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python制作最美应用的爬虫
2015/10/28 Python
python3设计模式之简单工厂模式
2017/10/17 Python
把pandas转换int型为str型的方法
2019/01/29 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Python time库基本使用方法分析
2019/12/13 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
金融专业毕业生推荐信
2013/11/26 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
大学四年规划书范文
2013/12/27 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
标准单位租车协议书
2014/09/23 职场文书
政风行风建设整改方案
2014/10/27 职场文书
2014年财政所工作总结
2014/11/22 职场文书
信用卡催款律师函
2015/05/27 职场文书
靠谱准确的求职信
2019/04/02 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python