Skip to content

Commit b3d5ed1

Browse files
author
shengyonggen
committed
1.5.9
1 parent 66c01d3 commit b3d5ed1

File tree

1 file changed

+92
-67
lines changed

1 file changed

+92
-67
lines changed

sensorsdata.js

Lines changed: 92 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ var _ = sd._ = {};
614614
, slice = ArrayProto.slice
615615
, toString = ObjProto.toString
616616
, hasOwnProperty = ObjProto.hasOwnProperty
617-
, LIB_VERSION = '1.5.8';
617+
, LIB_VERSION = '1.5.9';
618618

619619
sd.lib_version = LIB_VERSION;
620620

@@ -1103,7 +1103,6 @@ var _ = sd._ = {};
11031103
this._values = {
11041104
};
11051105
this._regex = null;
1106-
this.version = 0.1;
11071106
this._regex = /^((\w+):\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(\w*)/;
11081107

11091108
if (typeof a != 'undefined') {
@@ -1143,7 +1142,45 @@ var _ = sd._ = {};
11431142
};
11441143
return new URLParser(para);
11451144
}
1145+
// 取host
1146+
_.referringDomain = function(referrer) {
1147+
var split = referrer.split('/');
1148+
if (split.length >= 3) {
1149+
return split[2];
1150+
}
1151+
return '';
1152+
};
1153+
// 取domain
1154+
_.getDomain = function(url){
1155+
if(typeof url === 'string' && url.split('.').length >= 2){
1156+
var temp = url.match(/[^\.]+\.[^.]+$/);
1157+
if(temp && temp[0]){
1158+
return temp[0];
1159+
}else{
1160+
return '';
1161+
}
1162+
}else{
1163+
return '';
1164+
}
1165+
}
1166+
1167+
1168+
// 是否有标准的浏览器环境,如果不是发送$errorEnviroment:{$errorReson:'没有window'}
1169+
_.hasStandardBrowserEnviroment = function(){
1170+
if(!window){
1171+
return 'window';
1172+
}
1173+
if(!document){
1174+
return 'document';
1175+
}
1176+
if(!navigator){
1177+
return 'navigator';
1178+
}
1179+
if(!screen){
1180+
return 'screen';
1181+
}
11461182

1183+
};
11471184

11481185
_.cookie = {
11491186
get: function(name) {
@@ -1166,9 +1203,7 @@ var _ = sd._ = {};
11661203
days = typeof days === 'undefined' ? 730 : days;
11671204

11681205
if (cross_subdomain) {
1169-
var matches = document.location.hostname.match(/[a-z0-9][a-z0-9\-]+\.[a-z\.]{2,6}$/i)
1170-
, domain = matches ? matches[0] : '';
1171-
1206+
var domain = _.info.pageProp.url_domain || '';
11721207
cdomain = ((domain) ? '; domain=.' + domain : '');
11731208
}
11741209
// 0 session
@@ -1329,6 +1364,25 @@ var _ = sd._ = {};
13291364
};
13301365

13311366
_.info = {
1367+
initPage: function(){
1368+
var referrer = document.referrer;
1369+
var referrer_host = referrer ? _.referringDomain(referrer) : referrer;
1370+
var referrer_domain = _.getDomainByHost(referrer_domain);
1371+
var url = location.href;
1372+
var url_host = url ? _.referringDomain(url) : url;
1373+
var url_domain = _.getDomainByHost(url_host);
1374+
this.pageProp = {
1375+
referrer: referrer,
1376+
referrer_host: referrer_host,
1377+
referrer_domain: referrer_domain,
1378+
url: url,
1379+
url_host: url_host,
1380+
url_domain: url_domain
1381+
};
1382+
},
1383+
//当前页面的一些属性,在store初始化是生成
1384+
pageProp: {},
1385+
13321386
campaignParams: function() {
13331387
var campaign_keywords = source_channel_standard.split(' ')
13341388
, kw = ''
@@ -1346,20 +1400,11 @@ var _ = sd._ = {};
13461400

13471401
return params;
13481402
},
1349-
1350-
referringDomain: function(referrer) {
1351-
var split = referrer.split('/');
1352-
if (split.length >= 3) {
1353-
return split[2];
1354-
}
1355-
return '';
1356-
},
1357-
1403+
// 预置属性
13581404
properties: function() {
13591405
return {
13601406
$os: detector.os.name,
13611407
$model: detector.device.name,
1362-
_browser_engine: detector.engine.name,
13631408
$os_version: String(detector.os.version),
13641409
$screen_height: Number(screen.height) || 0,
13651410
$screen_width: Number(screen.width) || 0,
@@ -1377,34 +1422,6 @@ var _ = sd._ = {};
13771422
}
13781423
};
13791424

1380-
/* 如果设置为傻瓜模式时,自动去设置一些属性,目前看来并不没有强烈需求,先注释掉
1381-
1382-
var seniorProp = {
1383-
data: {},
1384-
init: function() {
1385-
var _referrer = document.referrer;
1386-
// set init register cookie
1387-
store.setPropsOnce({
1388-
_init_referrer: _referrer,
1389-
_init_referrer_domain: _.info.referringDomain(_referrer)
1390-
});
1391-
// set init sessionRegister cookie
1392-
store.setSessionPropsOnce({
1393-
_session_referrer: _referrer,
1394-
_session_referrer_domain: _.info.referringDomain(_referrer)
1395-
});
1396-
// set init props
1397-
var source = _.info.campaignParams();
1398-
this.data = {
1399-
_current_url: location.href
1400-
};
1401-
_.extend(this.data, source);
1402-
1403-
}
1404-
};
1405-
1406-
*/
1407-
14081425
// 数据发送状态
14091426
sd.sendState = {}
14101427
//成功发送数
@@ -1487,7 +1504,22 @@ var _ = sd._ = {};
14871504
}
14881505
}
14891506
}
1507+
},
1508+
//检查是否是latest
1509+
checkIsFirstLatest: function(){
1510+
var url_domain = _.info.pageProp.url_domain;
1511+
var referrer_domain = _.info.pageProp.referrer_domain;
1512+
// 如果域名不一致,就register为latest
1513+
/* 1.6 todo
1514+
if(url_domain !== '' && url_domain !== referrer_domain){
1515+
sa.register({
1516+
$latest_referrer: _.info.pageProp.referrer,
1517+
$latest_referrer_domain: _.info.pageProp.referrer_domain
1518+
});
1519+
}
1520+
*/
14901521
}
1522+
14911523
};
14921524

14931525
var saEvent = {};
@@ -1623,25 +1655,6 @@ var _ = sd._ = {};
16231655

16241656
_.extend(data, p);
16251657

1626-
// 测试部分数据没有distinct_id的问题
1627-
if(typeof data.distinct_id !== 'string' || typeof data.distinct_id === ''){
1628-
var wrong_case = '';
1629-
switch (data.distinct_id) {
1630-
case null :
1631-
wrong_case = 'null';
1632-
break;
1633-
case (void 0) :
1634-
wrong_case = 'undefined';
1635-
break;
1636-
case '':
1637-
wrong_case = '空';
1638-
break;
1639-
default:
1640-
wrong_case = String(data.distinct_id);
1641-
}
1642-
error_msg.push('distinct_id_wrong' + wrong_case + '-' + (new Date()).getTime());
1643-
}
1644-
16451658
if(error_msg.length > 0){
16461659
data.jssdk_error = error_msg.join('--');
16471660
}
@@ -1795,6 +1808,7 @@ var _ = sd._ = {};
17951808
}
17961809
//判断新用户
17971810
saNewUser.storeInitCheck();
1811+
saNewUser.checkIsFirstLatest();
17981812
// 如果初始化cookie失败,发送错误事件
17991813
/*
18001814
if(error_msg.length > 0 && sd.para.send_error_event){
@@ -1818,23 +1832,23 @@ var _ = sd._ = {};
18181832
var _referrer = (document.referrer).slice(0,sd.para.max_referrer_string_length);
18191833
sd.setOnceProfile({
18201834
_init_referrer: _referrer,
1821-
_init_referrer_domain: _.info.referringDomain(_referrer)
1835+
_init_referrer_domain: _.referringDomain(_referrer)
18221836
});
18231837
},
18241838
// set init sessionRegister cookie
18251839
setSessionReferrer: function() {
18261840
var _referrer = (document.referrer).slice(0,sd.para.max_referrer_string_length);
18271841
store.setSessionPropsOnce({
18281842
_session_referrer: _referrer,
1829-
_session_referrer_domain: _.info.referringDomain(_referrer)
1843+
_session_referrer_domain: _.referringDomain(_referrer)
18301844
});
18311845
},
18321846
// set default referrr and pageurl
18331847
setDefaultAttr: function() {
18341848
_.info.register({
18351849
_current_url: location.href,
18361850
_referrer: (document.referrer).slice(0,sd.para.max_referrer_string_length),
1837-
_referring_domain: _.info.referringDomain(document.referrer)
1851+
_referring_domain: _.referringDomain(document.referrer)
18381852
});
18391853
},
18401854

@@ -1854,14 +1868,14 @@ var _ = sd._ = {};
18541868
$first_visit_time: new Date(),
18551869
$first_referrer: (document.referrer).slice(0,sd.para.max_referrer_string_length),
18561870
$first_browser_language: navigator.language,
1857-
$first_referrer_host: _.info.referringDomain(document.referrer)
1871+
$first_referrer_host: _.referringDomain(document.referrer)
18581872
},$utms)
18591873
);
18601874
}
18611875
// trackpageview
18621876
sd.track('$pageview',_.extend({
18631877
$referrer: (document.referrer).slice(0,sd.para.max_referrer_string_length),
1864-
$referrer_host: _.info.referringDomain(document.referrer),
1878+
$referrer_host: _.referringDomain(document.referrer),
18651879
$url: location.href,
18661880
$url_path: location.pathname,
18671881
$title: document.title
@@ -2104,7 +2118,18 @@ var _ = sd._ = {};
21042118

21052119

21062120
sd.init = function() {
2121+
// 防止爬虫等异常情况
2122+
/*
2123+
if(!_.hasStandardBrowserEnviroment()){
2124+
return false;
2125+
}*/
2126+
// 初始化referrer等页面属性 1.6
2127+
2128+
//_.info.initPage();
2129+
2130+
// 初始化distinct_id
21072131
store.init();
2132+
21082133
_.each(sd._q, function(content) {
21092134
sd[content[0]].apply(sd, slice.call(content[1]));
21102135
});

0 commit comments

Comments
 (0)