@@ -614,7 +614,7 @@ var _ = sd._ = {};
614
614
, slice = ArrayProto . slice
615
615
, toString = ObjProto . toString
616
616
, hasOwnProperty = ObjProto . hasOwnProperty
617
- , LIB_VERSION = '1.5.8 ' ;
617
+ , LIB_VERSION = '1.5.9 ' ;
618
618
619
619
sd . lib_version = LIB_VERSION ;
620
620
@@ -1103,7 +1103,6 @@ var _ = sd._ = {};
1103
1103
this . _values = {
1104
1104
} ;
1105
1105
this . _regex = null ;
1106
- this . version = 0.1 ;
1107
1106
this . _regex = / ^ ( ( \w + ) : \/ \/ ) ? ( ( \w + ) : ? ( \w + ) ? @ ) ? ( [ ^ \/ \? : ] + ) : ? ( \d + ) ? ( \/ ? [ ^ \? # ] + ) ? \? ? ( [ ^ # ] + ) ? # ? ( \w * ) / ;
1108
1107
1109
1108
if ( typeof a != 'undefined' ) {
@@ -1143,7 +1142,45 @@ var _ = sd._ = {};
1143
1142
} ;
1144
1143
return new URLParser ( para ) ;
1145
1144
}
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
+ }
1146
1182
1183
+ } ;
1147
1184
1148
1185
_ . cookie = {
1149
1186
get : function ( name ) {
@@ -1166,9 +1203,7 @@ var _ = sd._ = {};
1166
1203
days = typeof days === 'undefined' ? 730 : days ;
1167
1204
1168
1205
if ( cross_subdomain ) {
1169
- var matches = document . location . hostname . match ( / [ a - z 0 - 9 ] [ a - z 0 - 9 \- ] + \. [ a - z \. ] { 2 , 6 } $ / i)
1170
- , domain = matches ? matches [ 0 ] : '' ;
1171
-
1206
+ var domain = _ . info . pageProp . url_domain || '' ;
1172
1207
cdomain = ( ( domain ) ? '; domain=.' + domain : '' ) ;
1173
1208
}
1174
1209
// 0 session
@@ -1329,6 +1364,25 @@ var _ = sd._ = {};
1329
1364
} ;
1330
1365
1331
1366
_ . 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
+
1332
1386
campaignParams : function ( ) {
1333
1387
var campaign_keywords = source_channel_standard . split ( ' ' )
1334
1388
, kw = ''
@@ -1346,20 +1400,11 @@ var _ = sd._ = {};
1346
1400
1347
1401
return params ;
1348
1402
} ,
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
+ // 预置属性
1358
1404
properties : function ( ) {
1359
1405
return {
1360
1406
$os : detector . os . name ,
1361
1407
$model : detector . device . name ,
1362
- _browser_engine : detector . engine . name ,
1363
1408
$os_version : String ( detector . os . version ) ,
1364
1409
$screen_height : Number ( screen . height ) || 0 ,
1365
1410
$screen_width : Number ( screen . width ) || 0 ,
@@ -1377,34 +1422,6 @@ var _ = sd._ = {};
1377
1422
}
1378
1423
} ;
1379
1424
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
-
1408
1425
// 数据发送状态
1409
1426
sd . sendState = { }
1410
1427
//成功发送数
@@ -1487,7 +1504,22 @@ var _ = sd._ = {};
1487
1504
}
1488
1505
}
1489
1506
}
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
+ */
1490
1521
}
1522
+
1491
1523
} ;
1492
1524
1493
1525
var saEvent = { } ;
@@ -1623,25 +1655,6 @@ var _ = sd._ = {};
1623
1655
1624
1656
_ . extend ( data , p ) ;
1625
1657
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
-
1645
1658
if ( error_msg . length > 0 ) {
1646
1659
data . jssdk_error = error_msg . join ( '--' ) ;
1647
1660
}
@@ -1795,6 +1808,7 @@ var _ = sd._ = {};
1795
1808
}
1796
1809
//判断新用户
1797
1810
saNewUser . storeInitCheck ( ) ;
1811
+ saNewUser . checkIsFirstLatest ( ) ;
1798
1812
// 如果初始化cookie失败,发送错误事件
1799
1813
/*
1800
1814
if(error_msg.length > 0 && sd.para.send_error_event){
@@ -1818,23 +1832,23 @@ var _ = sd._ = {};
1818
1832
var _referrer = ( document . referrer ) . slice ( 0 , sd . para . max_referrer_string_length ) ;
1819
1833
sd . setOnceProfile ( {
1820
1834
_init_referrer : _referrer ,
1821
- _init_referrer_domain : _ . info . referringDomain ( _referrer )
1835
+ _init_referrer_domain : _ . referringDomain ( _referrer )
1822
1836
} ) ;
1823
1837
} ,
1824
1838
// set init sessionRegister cookie
1825
1839
setSessionReferrer : function ( ) {
1826
1840
var _referrer = ( document . referrer ) . slice ( 0 , sd . para . max_referrer_string_length ) ;
1827
1841
store . setSessionPropsOnce ( {
1828
1842
_session_referrer : _referrer ,
1829
- _session_referrer_domain : _ . info . referringDomain ( _referrer )
1843
+ _session_referrer_domain : _ . referringDomain ( _referrer )
1830
1844
} ) ;
1831
1845
} ,
1832
1846
// set default referrr and pageurl
1833
1847
setDefaultAttr : function ( ) {
1834
1848
_ . info . register ( {
1835
1849
_current_url : location . href ,
1836
1850
_referrer : ( document . referrer ) . slice ( 0 , sd . para . max_referrer_string_length ) ,
1837
- _referring_domain : _ . info . referringDomain ( document . referrer )
1851
+ _referring_domain : _ . referringDomain ( document . referrer )
1838
1852
} ) ;
1839
1853
} ,
1840
1854
@@ -1854,14 +1868,14 @@ var _ = sd._ = {};
1854
1868
$first_visit_time : new Date ( ) ,
1855
1869
$first_referrer : ( document . referrer ) . slice ( 0 , sd . para . max_referrer_string_length ) ,
1856
1870
$first_browser_language : navigator . language ,
1857
- $first_referrer_host : _ . info . referringDomain ( document . referrer )
1871
+ $first_referrer_host : _ . referringDomain ( document . referrer )
1858
1872
} , $utms )
1859
1873
) ;
1860
1874
}
1861
1875
// trackpageview
1862
1876
sd . track ( '$pageview' , _ . extend ( {
1863
1877
$referrer : ( document . referrer ) . slice ( 0 , sd . para . max_referrer_string_length ) ,
1864
- $referrer_host : _ . info . referringDomain ( document . referrer ) ,
1878
+ $referrer_host : _ . referringDomain ( document . referrer ) ,
1865
1879
$url : location . href ,
1866
1880
$url_path : location . pathname ,
1867
1881
$title : document . title
@@ -2104,7 +2118,18 @@ var _ = sd._ = {};
2104
2118
2105
2119
2106
2120
sd . init = function ( ) {
2121
+ // 防止爬虫等异常情况
2122
+ /*
2123
+ if(!_.hasStandardBrowserEnviroment()){
2124
+ return false;
2125
+ }*/
2126
+ // 初始化referrer等页面属性 1.6
2127
+
2128
+ //_.info.initPage();
2129
+
2130
+ // 初始化distinct_id
2107
2131
store . init ( ) ;
2132
+
2108
2133
_ . each ( sd . _q , function ( content ) {
2109
2134
sd [ content [ 0 ] ] . apply ( sd , slice . call ( content [ 1 ] ) ) ;
2110
2135
} ) ;
0 commit comments