@@ -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 - 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 || '' ;
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