手机浏览器唤起微信分享(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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
JavaScript也谈内存优化
Jun 06 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
jQuery网页选项卡插件rTabs用法实例分析
Aug 26 Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
vue动态绑定class选中当前列表变色的方法示例
Dec 19 Javascript
layui的layedit富文本赋值方法
Sep 18 Javascript
vue实现简单的登录弹出框
Oct 26 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
探讨js中的双感叹号判断
2013/11/11 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
学习jQuey中的return false
2015/12/18 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python常用知识梳理(必看篇)
2017/03/23 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
费用会计岗位职责
2014/01/01 职场文书
十八大演讲稿
2014/05/22 职场文书
设备技术员岗位职责
2015/04/11 职场文书
环保建议书范文
2015/09/14 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL