原理

  

功能  

  集成微信、微博、开心、豆瓣、人人、qq微博、搜狐、qq空间等分享

即时分享: 默认加载插件,即启动全部分享

定制分享:通过参数配置、静态数据配置 由你决定何时分享,如何分享

扩展: 通过数据配置,支撑分享拓展

使用场景

即时分享

   默认配置加载完js即启动全部分享

定制分享

   前提

需先关闭即时分享 

   /*********  静态数据配置 begin    *********/
var IS_SHARE = false, //true:即时分享,加载完即启动 false:定制分享,由你决定何时分享

   写法

//初始化后默认启动全部分享
Share.init();
//初始化后自动调用微信分享
Share.init({once:'wechat'}) //初始化 显式调用微信分享。once:'wechat'标记只能进行微信分享
Share.init({once:'wechat',delay:true}) Share.wechat() //初始化 显式调用任何一种分享
Share.init({delay:true})
Share.weibo();

扩展

   修改默认值

     通用修改  修改 ‘静态数据配置’ 范围里DEF_DATA对应的数据

动态修改

Share.init({default:{qqweibo:{appKey: 'hello',
site: 'twb'}}});            

增加其他分享

      假设增加一个suningweibo的分享

 //如果common配置不够用,增加suningweibo的特殊配置
DEF_DATA = {
common: { //通用
...
,
suningweibo: {
site: ....
}
}, //如果是url分享,增加对应模板
TPL_SHARE = {
...
suningweibo: 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&title={title}&site={name}&pic={pic}'
} //如果非url分享,像微信一样增加方法
METHOD_SHARE = {
suningweibo: function(){
...
}
} //显示调用
window.Share.suningweibo();

支持范围

  用到了HTML5的方法,querySelector、console。

IE9以上,firefox、opera、chrome支持。

源码

  

(function(W){
//异常控制
W['Share'] && console.warn('Share对象你已定义过,请勿覆盖webchat、weibo...分享方法!'); /********* 静态数据配置 begin *********/
var IS_SHARE = false, //true:即时分享,加载完即启动 false:定制分享,由你决定何时分享,如何分享
//默认分享数据
DEF_DATA = {
common: { //通用
url: W.location.href,
title: '#818数码神促销# 8月6日-22日苏宁相机亿元红包刮刮刮,真金白银刮起来【http://t.cn/8soFaZr】',
pic: '' //图片链接地址,一般不需要设置,会被应用自动抓取
},
qqweibo: { //qq微博
appKey: '65e3731f449e42a484c25c668160b355',
site: 'http://www.suning.com'
},
qzone: {
name: '苏宁易购'
},
wechat: { //微信
url: 'http://m.suning.com/wap/game/redpaperOnLand.html?terminalFlag=0',
pic: 'http://sale.suning.com/images/advertise/010/hongbao/hongbao.jpg',
content: '8月6日-22日苏宁相机亿元红包刮刮刮,真金白银刮起来',
title: '818数码神促销'
}
},
//模板分享集
TPL_SHARE = {
weibo: 'http://v.t.sina.com.cn/share/share.php?url={url}&appkey=400813291&title={title}&pic={pic}',
kaixin: 'http://www.kaixin001.com/rest/records.php?url={url}&style=11&content={title}&pic={pic}&stime=&sig=',
douban: 'http://www.douban.com/recommend/?url={url}&title={title}&comment={title}',
renren: 'http://widget.renren.com/dialog/share?resourceUrl={url}&title={url}&description={title}',
qqweibo: 'http://v.t.qq.com/share/share.php?title={title}&url={url}&appkey={appKey}&site={site}&pic={pic}',
sohu: 'http://t.sohu.com/third/post.jsp?&url={url}&title={title}&content=utf-8&pic={pic}',
qzone: 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&title={title}&site={name}&pic={pic}'
},
//方法分享集
METHOD_SHARE = {
wechat: function(){
return W['Share'].wechat();
}
},
// 需要编码的字段
ENCODE_FIELD = 'title,name,content';
/********* 静态数据配置 end *********/ /********* 分享对象 begin *********/
W['Share'] = {
options:{
delay: false, //默认立即执行分享,为true时,分享方法需显式调用
once: undefined, //设定仅允许用作某分享 比如once:wechat,此类只用于微信分享,其他分享方法不再解析提供
default:{} //默认值,默认读取DEF_DATA的值
},
init: function(options){
//读取配置
var ops = this.options = options,
once = ops.once;
/* if(options){
delay = ops.delay === true;
once = ops.once;
}*/
//配置数据初始化: 中文编码
var encodeField = [',',ENCODE_FIELD,','].join('');
//数据源仍然是 DEF_DATA,出于性能和实际应用,不拷贝一份到default
for(var i in DEF_DATA){
for(var k in DEF_DATA[i]){
ops.default[i] && (DEF_DATA[i] = ops.default[i]);
(encodeField.indexOf([',',k,','].join('')) != -1) && (DEF_DATA[i][k] = encodeURIComponent(DEF_DATA[i][k]));
}
} //解析分享方法
this._parseShare();
!!!delay && (once ? this[once]() : this.all());
}, /**
* 微信
*/
wechat: function(){
var data = DEF_DATA.wechat,
config = {
"appid": '',
"img_url": data.pic,
"img_width": "200",
"img_height": "200",
"link": data.url,
"desc": data.content,
"title": data.title
};
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
WeixinJSBridge.call('hideToolbar');
WeixinJSBridge.on('menu:share:appmessage', function(argv) { // 分享给朋友
WeixinJSBridge.invoke('sendAppMessage', config, function(res) {
});
});
WeixinJSBridge.on('menu:share:timeline', function(argv) { // 分享到朋友圈
WeixinJSBridge.invoke('shareTimeline', config, function(res) {
});
});
WeixinJSBridge.on('menu:share:weibo', function(argv) { // 分享到微博
WeixinJSBridge.invoke('shareWeibo', config, function(res) {
});
});
});
}, all: function(){
//迭代方法分享
for(var i in METHOD_SHARE) METHOD_SHARE[i]();
//迭代模板分享
for(var k in TPL_SHARE) this[k]();
}, _getSelector: function(suf){
return '.share_'+suf;
}, /**
* 解析分享方法
*/
_parseShare: function(){
var _this = this,ops = this.options,once = ops.once;delay = ops.delay; //配置了once仅解析单个方法
if(once){
return !METHOD_SHARE[once] && (this[k] = function(k){
return _this._urlShare(k);
})
} //解析全部方法
for(var k in TPL_SHARE) this[k] = function(k){
return function(){
_this._urlShare(k);
}
}(k);
},
_urlShare: function(key){
try{
var dom = document.querySelector(this._getSelector(key));
config = this._extend({}, DEF_DATA.common, DEF_DATA[key]);
dom.href = TPL_SHARE[key].format(config);
}catch(e){
console.warn('找不到分享的元素:' + this._getSelector(key));
}
},
_extend: function(obj, source, dest){
if(!dest) return source; for(var i in source) obj[i] = source[i];
for(var k in dest) obj[k] = dest[k];
return obj;
}
}
/********* 分享对象 end *********/ /********* Util begin *********/
//拓展模板方法
!String.format && (String.prototype.format = function(){
var jsonFlag = arguments.length == 1 && arguments[0] instanceof Object,
args = jsonFlag ? arguments[0] : arguments,
reg = jsonFlag ? /\{(\w+)\}/g : /\{(\d+)\}/g; return this.replace(reg,
function(m, i){
return args[i];
});
});
/********* Util end *********/ IS_SHARE && (W['Share'].init());
})(window);

目前微信 微博 新浪 豆瓣等所有分享的js插件的更多相关文章

  1. 微信qq,新浪等第三方授权登录的理解

    偶们常说的第三方是指的微信,qq,新浪这些第三方,因为现在基本每个人都有qq或者微信,那么我们就可以通过这些第三方进行登录.而这些网站比如慕课网是通过第三方获取用户的基本信息 它会有个勾选按钮,提示是 ...

  2. App分享之微信微博等各个社交平台的分享授权规则和常见问题

    一.新浪微博分享规则 新浪微博支持分享类型: 应用内分享也就是网页分享支持: 文字,文字+图片,要分享链接需要链接添加在text里分享 客户端分享支持:文字,图片,文字+图片,图片+文字+链接 参数说 ...

  3. HBuilder webApp开发(七)微信/QQ/新浪/腾讯微博分享

    链接 https://blog.csdn.net/zhuming3834/article/details/51706256

  4. 【微信开发】 新浪SAE开发平台 注意事项

    1. 微信开发 新浪SAE开发平台 验证Token 一直失败? 这个问题困扰了一个又一个的微信学习者,现在百度到的答案有:在echo $echoStr;之前添加header('content-type ...

  5. 不实名认证去除新浪云SEA的实名认证提示的方法

    最近在做个人空间,不想搭本地php和数据库,为了省事,在新浪云SEA开了个php应用,挺好用的,现在没什么访问量,基本不收费,特别适合练手. 我的空间是php,由于没有实名验证,每个页面都会出现一个 ...

  6. 新浪云部署java web程序 注意事项

    在新浪云新手指南里有部署java的示例,但是对一个新手来说难免会有一些地方犯错,折腾了好长时间才把自己的java web部署到了新浪云.这里主要写一些我遇到的问题与第一次使用新浪云的朋友分享一下. 首 ...

  7. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  8. 【玩转微信公众平台之六】 搭建新浪SAEserver

    赶紧接上一篇继续讲. ------本篇将介绍怎样搭建 新浪SAEserver.猛戳 http://sae.sina.com.cn/1.先自己注冊一个账号,假设有新浪的账号,微博之类的都能够直接拿来用, ...

  9. 【玩转微信公众平台六】 构建新浪SAEserver

    连接急于继续发言. ------本文主要介绍介绍如何设置 新浪SAEserver.猛戳 http://sae.sina.com.cn/1.先自己注冊一个账号,假设有新浪的账号,微博之类的都能够直接拿来 ...

随机推荐

  1. 计算机程序的思维逻辑 (79) - 方便的CompletionService

    上节,我们提到,在异步任务程序中,一种常见的场景是,主线程提交多个异步任务,然后希望有任务完成就处理结果,并且按任务完成顺序逐个处理,对于这种场景,Java并发包提供了一个方便的方法,使用Comple ...

  2. 关于css解决俩边等高的问题

    前段时间公司需哦一个后台管理系统,左侧是导航栏,右侧是content区域.然厚刚开始用的是js 去控制的,但是当页面的椰蓉过长的时候,有与js单线程,加载比较慢,就会有那么一个过程,查找了很多的方法都 ...

  3. Java环境变量详解

    自己总结些再加抄点: 安装JDK后要配置环境变量,主要有三个: 1 JAVA_HOME ->为JDK的安装目录,如:F:\JAVA\jdk1.6.0_04 2 CLASSPATH ->到哪 ...

  4. Executor框架学习笔记

    Java中的线程即是工作单元也是执行机制,从JDK 5后,工作单元与执行机制被分离.工作单元包括Runnable和Callable,执行机制由JDK 5中增加的java.util.concurrent ...

  5. python自动化开发-[第一天]-基础数据类型与编码

    1.Python与其他语言对比 - C语言的解释方式  代码-->机器码-->计算机 - python,java,php等高级语言的解释方式  代码-->字节码-->机器码-- ...

  6. 不完全CSS3图解

    温故而知新.用XMind总结了下CSS3,打钩的代表比较常用的.希望对大家整体上理解CSS3有所帮助吧.

  7. python特征提取——pyAudioAnalysis工具包

    作者:桂. 时间:2017-05-04  18:31:09 链接:http://www.cnblogs.com/xingshansi/p/6806637.html 前言 语音识别等应用离不开音频特征的 ...

  8. 北漂面试经历(一(两)年工作经验)-- Java基础部分

    Java基础部分 常量和变量的区别:final 关键词修饰的变量是恒定不变的,如果还有static关键词修饰的话,常常称为编译期常量.变量,运行时可以修改其引用. Java基本类似有哪些 1 Byte ...

  9. c# post basic 接口

    string url = "http://xxxxxxxxx";//地址,请反复检查地址的准确性 string usernamePassword = "username: ...

  10. VM VirtrualBox 安装centos6.5后的网络设置

    小白学习linux(一) 本文只是介绍VirtrualBox安装centos完成后的网络设置: 每次用虚拟机装完centos后,捣鼓半天才能上网.熟话说的好,好记性不如烂笔头,写个随笔记录下设置过程, ...