Created
May 26, 2014 06:38
-
-
Save jun-lu/6ff271d0d776cfe8ffc5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* share分享组件 | |
* Copyright(c) 2013 m.taobao.com | |
* Author: 玄寂 <xuanji.jw@taobao.com> | |
*/ | |
;(function(lib){ | |
var __cache = { | |
'platform' : '', | |
'version' : '', | |
'isInTaobaoApp' : 'noRecord', | |
'URLInfo' : '', | |
'UAWindVaneInfo' : '' | |
}; | |
var Share = {}; | |
Share = { | |
/** | |
* 返回设备平台 | |
* | |
* @returns {string} 返回值为 'ios' or 'android' or '' | |
*/ | |
platform : function(){ | |
var userAgent = navigator.userAgent; | |
var platform = ''; | |
if (userAgent.match(/iPhone|iPod/i) != null) { | |
platform = 'iphone'; | |
} else if (userAgent.match(/iPad/i) != null){ | |
platform = 'ipad'; | |
} else if (userAgent.match(/Android/i) != null) { | |
platform = 'android'; | |
} | |
__cache.platform = platform; | |
return platform; | |
}, | |
/** | |
* 如果页面是客户端打开,则返回true 反之返回false | |
* | |
* @returns {boolean} | |
*/ | |
isInTaobaoApp : function(){ | |
var isTaobaoTTID = Share.hasURLTTIDInfo().hasTaobaoURLTTID; | |
var isWindVane = Share.hasUAWindVaneInfo().hasUAWindVaneInfo; | |
var isTaobaoApp = (window.navigator.userAgent.indexOf('taobao') != "-1"); | |
var isInClient; | |
isInClient = isWindVane ? true : (isTaobaoTTID ? true : false); | |
__cache.isInTaobaoApp = isInClient; | |
return isInClient && window.WindVane.api.base.isWindVaneEnvironment() && isTaobaoApp; | |
}, | |
/** | |
* 获取URL中TTID的相关信息 | |
* | |
* @returns {Object} | |
* @returns Object.hasURLTTID {boolean} URL中是否含有 ttid信息 有true 无false | |
* @returns Object.version {string} UA中的客户端版本号 | |
* @returns Object.platform {string} UA中体现出来的平台 | |
*/ | |
hasURLTTIDInfo : function(){ | |
var info = {}; | |
var decodeURL = decodeURIComponent(window.location.href); | |
var ttid = decodeURL.match(/(?:\?|&)ttid=(?:.*)@taobao_(iphone|android|ipad)_((?:\d+\.){2,3}\d)/i); | |
info.hasTaobaoURLTTID = ttid ? true : false; | |
if(info.hasTaobaoURLTTID){ | |
info.platform = ttid[1]; | |
var ver = ttid[2].split('.'); | |
if(ver.length < 4){ | |
ver.push('0'); | |
} | |
info.version = parseInt(ver.join('')); | |
} | |
__cache.URLInfo = info; | |
return info; | |
}, | |
/** | |
* 获取UA中WindVane的相关信息 | |
* | |
* @returns {Object} | |
* @returns Object.hasUAWindVaneInfo {boolean} UA中是否含有 WindVane信息 有true 无false | |
* @returns Object.version {string} UA中的客户端版本号 | |
* @returns Object.platform {string} UA中体现出来的平台 | |
*/ | |
hasUAWindVaneInfo : function(){ | |
var UAInfo = {}; | |
var userAgent = navigator.userAgent; | |
var UAWindVaneInfo = userAgent.match(/\bWindVane\/((?:\d+\.){2,3}\d)(?:\s|$)/i); | |
UAInfo.hasUAWindVaneInfo = UAWindVaneInfo ? true : false; | |
if(UAWindVaneInfo){ | |
// var ver = UAWindVaneInfo[1].split('.'); | |
// if(ver.length < 4){ | |
// ver.push('0'); | |
// } | |
// UAInfo.version = parseInt(ver.join('')); | |
// 匹配到的是WindVane的版本号,保留后用,目前凡是UA中含有WindVane的版本全部支持分享故为9999 | |
// 安卓支持从3.9.2 iOS 3.4.0 | |
UAInfo.version = 9999; | |
UAInfo.platform = __cache.platform || Share.platform(); | |
} | |
__cache.UAWindVaneInfo = UAInfo; | |
return UAInfo; | |
}, | |
/** | |
* 根据UA或者TTID给出客户端版本号 | |
* | |
* @returns {string} | |
*/ | |
hasClientVersion : function(){ | |
var version = ''; | |
var isInTaobaoApp = (__cache.isInTaobaoApp != 'noRecord' ? __cache.isInTaobaoApp : Share.isInTaobaoApp()); | |
//由上决定了之下两个对象只需从缓存中获取 | |
var URLInfo = __cache.URLInfo; | |
var UAWindVaneInfo = __cache.UAWindVaneInfo; | |
var version = ''; | |
if(isInTaobaoApp){ | |
version = UAWindVaneInfo.version || URLInfo.version; | |
} | |
__cache.version = version; | |
return version; | |
}, | |
/** | |
* 指定打开淘宝APP | |
* | |
* @param {string} param 分享的字段,title,text,url,image,from | |
* @param {Function} success 调起分享的回调 | |
* @param {Function} fail 不能调起分享的回调 | |
* @no returns | |
*/ | |
openTaobaoAPPNativeShare : function(params, success, fail){ | |
var isInTaobaoApp = (__cache.isInTaobaoApp != 'noRecord' ? __cache.isInTaobaoApp : Share.isInTaobaoApp()); | |
var version = __cache.version || Share.hasClientVersion(); | |
var platform = __cache.platform || Share.platform(); | |
// var param = {}; | |
params.title || (params.title = '发现一个好玩的'); | |
params.text || (params.text = ''); | |
params.url || (params.url = ''); | |
params.image || (params.image = ''); | |
params.from || (params.from = 'H5_Share'); | |
if(isInTaobaoApp && ((platform == 'iphone' && version >= 3200)|| | |
(platform == 'ipad' && version >= 2330)|| | |
(platform == 'android' && version >= 3800))){ | |
window.WindVane.call('TBSharedModule', 'showSharedMenu', JSON.stringify(params), function(data){ | |
data.params = params; | |
success(data); | |
}, function(data){ | |
data.params = params; | |
fail(data); | |
}); | |
}else{ | |
var data = {}; | |
data.params = params; | |
fail(data); | |
} | |
} | |
} | |
if( lib.components ){ | |
lib.components.share = Share; | |
}else{ | |
lib.components = { | |
share:Share | |
}; | |
} | |
})(window.Page || (window.Page = {})); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment