手机浏览器唤起微信分享(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 相关文章推荐
jquery 框架使用教程 AJAX篇
Oct 11 Javascript
Javascript中获取出错代码所在文件及行数的代码
Sep 23 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
Angular2环境搭建具体操作步骤(推荐)
Aug 04 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
vant自定义二级菜单操作
Nov 02 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
奇妙的js
2007/09/24 Javascript
js tab效果的实现代码
2009/12/26 Javascript
Js 中debug方式
2010/02/07 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python爬虫开发与项目实战
2020/12/16 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
台湾三立电视电商平台:电电购
2019/09/09 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
手机销售员岗位职责
2015/04/11 职场文书
家庭贫困证明
2015/06/16 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS