H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例
H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例
(转载:https://blog.csdn.net/weixin_38787928/article/details/86741227)
html:
<span class="viewshare wx" data-mshare=""></span>
<span class="viewshare wxline" data-mshare=""></span>
<span class="viewshare QQ" data-mshare=""></span>
<span class="viewshare wb" data-mshare=""></span>
js:
// 引入JS文件
<script src="js/mshare.js"></script>
var u = navigator.appVersion;
var uc = u.split('UCBrowser/').length > ? : ;
var qq = u.split('MQQBrowser/').length > ? : ;
var wx = ((u.match(/MicroMessenger/i)) && (u.match(/MicroMessenger/i).toString().toLowerCase() == 'micromessenger')); // 绑定单击事件
$('.wx,.wxline,.QQ,.wb').on("click", function () {
if(uc||(qq && !wx)){
mshare.init(+$(this).data('mshare'));
}
}
mshare.js
/**
* mshare.js
* 此插件主要作用是在UC和QQ两个主流浏览器
* 上面触发微信分享到朋友圈或发送给朋友的功能
* 代码编写过程中 参考:
* http://mjs.sinaimg.cn/wap/module/share/201501261608/js/addShare.js
* 此外,JefferyWang的项目对我也有一定启示:
* https://github.com/JefferyWang/nativeShare.js
*
*/ !(function(global) {
'use strict'; var UA, uc, qq, wx, tc, qqVs, ucVs, os,qqBridgeDone; UA = navigator.appVersion; // 是否是 UC 浏览器
uc = UA.split('UCBrowser/').length > ? : ; // 判断 qq 浏览器
// 然而qq浏览器分高低版本 2代表高版本 1代表低版本
qq = UA.split('MQQBrowser/').length > ? : ; // 是否是微信
wx = ((UA.match(/MicroMessenger/i)) && (UA.match(/MicroMessenger/i).toString().toLowerCase() == 'micromessenger')); // 浏览器版本
qqVs = qq ? parseFloat(UA.split('MQQBrowser/')[]) : ;
ucVs = uc ? parseFloat(UA.split('UCBrowser/')[]) : ; //获取操作系统信息 iPhone(1) Android(2)
os = (function () {
var ua = navigator.userAgent; if (/iphone|ipod/i.test(ua)) {
return ;
} else if(/android/i.test(ua)){
return ;
} else {
return ;
}
}()); // 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 == ) || (qq && qqVs < 5.3 && os == )) {
qq = ;
} else {
if (qq && qqVs < 5.4 && os == ) {
qq = ;
} else {
if (uc && ( (ucVs < 10.2 && os == ) || (ucVs < 9.7 && os == ) )) {
uc = ;
}
}
} /**
* 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 == ) ? '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 == ) {
if(config.type==){
platform = 'WechatTimeline';
}else if(config.type==){
platform = 'WechatFriends';
}else if(config.type==){
platform = 'QQ';
}else if(config.type==){
platform = 'SinaWeibo';
}else if(config.type==){
platform = 'undefined';
}
} else if (os == ) {
if(config.type==){
platform = 'kWeixinFriend';
}else if(config.type==){
platform = 'kWeixin';
}else if(config.type==){
platform = 'kQQ';
}else if(config.type==){
platform = 'kSinaWeibo';
}else if(config.type==){
platform = 'undefined';
}
}
} 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 = ''; //微信好友1, 微信朋友圈8,QQ 4
if(config.type==){
type = ;
}else if(config.type==){
type = ;
}else if(config.type==){
type = ;
}else if(config.type==){
type = ;
}else if(config.type==){
type = 'undefined';
} 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 ==> 直接弹出原生 3==>QQ
* }
*/
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);
H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例的更多相关文章
- 如何设置浏览器禁止使用UC浏览器
通过UA可以判断浏览器是否是UC浏览器 if(navigator.userAgent.indexOf('UCBrowser')>-1) { alert("当前浏览器不支持本站,建议更 ...
- (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow 这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...
- APP内的H5页面测试方法, 移动端的浏览器(例如UC浏览器)测试方法
前言: 用appium做UI自动化,测试APP里面的H5和测试手机浏览器打开的H5的操作流程上是有所区别的.比如要测试APP内嵌的H5需要先操作appium启动APP,然后通过context切到web ...
- 让微信,qq,uc浏览器使用全屏模式,全屏模式里,浏览器是不会上下左右滑动出现背景的
<meta name="x5-fullscreen" content="true"> <meta name="full-screen ...
- Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
这是一张QQ空间说说详情的截图. 分析: .点击右上角三个点的图标,在界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 .当该区域出现的时候,详情界面便灰了,也说成透明度变化了 .当任意选了一个 ...
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 前言 移动端页面调试一直是好多朋友头疼的问题,iOS 由于其封闭的特性和整体较高的性能,整体适配相对好做,调试 ...
- UC浏览器 - 不负责任思考
前言 UC浏览器的辉煌应该是我读大学(2008年)的时候,转眼间,十年过去了,庆幸的是UC还在,我从使用者变成了一名UC的员工. 以下都是个人的不负责任的猜想或者思考 变更 塞班时代 UC浏览器的地位 ...
- 移动端UC浏览器和QQ浏览器的部分私有meta属性
UC浏览器 1.设置屏幕横屏还是竖屏 <meta name="screen-orientation" content="portrait | landscape&q ...
- 通过js区分移动端浏览器(微信浏览器、QQ浏览器、QQ内置浏览器)
由于公司业务中涉及到一个分享指引功能,而像微信.QQ内置浏览器需要引导用户点击右上角进行操作,其他浏览器则引导点击浏览器下方进行操作,因此需要区分浏览器类型: 通过在页面alert(navigator ...
随机推荐
- Linux服务器---流量监控webalizer
webalize webzlizer是一个免费的web server分析工具,它能够分析apache.ftp等日志,将结果以html形式展示. 1.安装一些依赖软件 [root@localhost b ...
- html5的理解
1.良好的移动性,以移动设备为主 2.响应式设计,以适应自动变化的屏幕尺寸 3.支持离线缓存技术,webStorage本地缓存 4.新增canvas.video.audio等新标签元素,新增特殊内容元 ...
- 推荐:全新Java开发思维导图
蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友. 但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可 ...
- html介绍和head标签
一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表 ...
- 关于js浅拷贝与深拷贝的理解
前端开发中,一般情况下,很少会去在意深拷贝与浅拷贝的关系. 大家知道,js变量有2种数据类型:基本类型和引用类型.基本类型的拷贝是将整个值完全拷贝一份的,也就是深拷贝.就是开辟了新的堆内存.所以基本类 ...
- gcahce事物不够,借助binlog追上
gcahce事物不够,借助binlog追上 宕机节点以单机集群启动,既自己作为一个集群启动,不过UUID要和旧的集群保持一致: 修复grastate.dat 文件的方式这里略,直接通过wsrep_re ...
- php使用phpexcel导出文件
php使用phpexcel导出文件 首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel 代码如下: <?php date_defaul ...
- python使用super()调用父类的方法
如果要在子类中引用父类的方法,但是又需要添加一些子类所特有的内容,可通过类名.方法()和super()来调用父类的方法,再个性化子类的对应函数. 直接使用类名.方法()来调用时,还是需要传入self为 ...
- netty集成ssl完整参考指南(含完整源码)
虽然我们在内部rpc通信中使用的是基于认证和报文头加密的方式实现安全性,但是有些时候仍然需要使用SSL加密,可能是因为对接的三方系统需要,也可能是由于open的考虑.中午特地测了下netty下集成ss ...
- c++中的header-only library
不同于在java中,虽然在java中,有些第三方库只是做了桥接的功能,比如slf4j-log4j-api,但是在运行时他们仍然是需要的,所以最多只能说是松耦合做得很好. 但是在c++中,一般我们应用第 ...