基于官方demo中的share.hml中的分享内容或者链接到微博,微信,QQ,自己简化了一个通用的分享方法,进一步减少分享功能的开发量。
代码附件中,由于不能上传html文件,所以把文件扩展名改成了doc,下载下来后改成share.html就可以了
js代码如下,也可以把文件中的js代码直接放到js文件中。
用法:
//这里的入口方法是
/**
* 分享内容或者链接
* @param {JSON} msgdata 分享数据的对象
* msgdata = {‘title’:'','href':'','desc':'','pic':''} 包含4个字段
* @param {Boolean} ishref 是否分享链接
*/
function appshare(msgdata, ishref){}
//例如引入了js文件后,
appshare({'title':'DCloud HBuilder-做最好的HTML5开发工具','href':'http://www.dcloud.io/','desc':'我正在使用HBuilder+HTML5开发移动应用,赶紧跟我一起来体验!','pic':'_www/img/logo.png'},true)
具体js代码:
var shares = null;
mui.plusReady(function() {
// 更新分享服务
plus.share.getServices(function(s) {
shares = {};
for(var i in s) {
var t = s[i];
shares[t.id] = t;
}
}, function(e) {
mui.toast("无享服务!");
console.log("获取分享服务列表失败:" + e.message);
});
});
/**
* 分享操作
* @param {JSON} sb 分享操作对象s.s为分享通道对象(plus.share.ShareService)
* @param {Boolean} ishref 是否分享链接
* @param {JSON} msginfo 分享内容
*/
function shareAction(sb, ishref, msginfo) {
if(!sb || !sb.s) {
mui.toast("无效的分享服务!");
return;
}
var msg = { content: msginfo.content, extra: { scene: sb.x } };
if(ishref) {
msg.title = msginfo.title;
msg.href = msginfo.href;
msg.content = msginfo.content;
msg.thumbs = [msginfo.pic];
msg.pictures = [msginfo.pic];
}
// 发送分享
if(sb.s.authenticated) {
console.log("---已授权---");
shareMessage(msg, sb.s);
} else {
console.log("---未授权---");
sb.s.authorize(function() {
shareMessage(msg, sb.s);
}, function(e) {
console.log("认证授权失败:" + e.code + " - " + e.message);
});
}
}
/**
* 发送分享消息
* @param {JSON} msg
* @param {plus.share.ShareService} s
*/
function shareMessage(msg, s) {
s.send(
msg,
function() {
mui.toast("分享到\"" + s.description + "\"成功! ");
},
function(e) {
mui.toast("分享到\"" + s.description + "\"失败! ");
// console.log("分享到\"" + s.description + "\"失败: " + JSON.stringify(e));
}
);
}
/**
* 分享内容或者链接
* @param {JSON} msgdata 分享数据的对象
* @param {Boolean} ishref 是否分享链接
*/
var appshare = function (msgdata, ishref) {
// 分享参数
if(ishref){
var msginfo = { title: msgdata.title, href: msgdata.href, content: msgdata.desc, pic: msgdata.pic };
}else{
var msginfo = { content: msgdata.desc };
}
var shareBts = [];
// 更新分享列表
var ss = shares['weixin'];
ss && ss.nativeClient && (shareBts.push({ title: '微信朋友圈', s: ss, x: 'WXSceneTimeline' }), shareBts.push({ title: '微信好友', s: ss, x: 'WXSceneSession' }));
ss = shares['qq'];
ss && ss.nativeClient && shareBts.push({ title: 'QQ', s: ss });
if(!ishref){
ss = shares['sinaweibo'];
ss && shareBts.push({ title: '新浪微博', s: ss });
}
// 弹出分享列表
shareBts.length > 0 ? plus.nativeUI.actionSheet({
title: '分享',
cancel: '取消',
buttons: shareBts
},
function(e) {
(e.index > 0) && shareAction(shareBts[e.index - 1], ishref, msginfo);
}
) : plus.nativeUI.alert('当前环境无法支持分享操作!');
}