@@ -23,7 +23,7 @@ var ArrayProto = Array.prototype,
2323 slice = ArrayProto . slice ,
2424 toString = ObjProto . toString ,
2525 hasOwnProperty = ObjProto . hasOwnProperty ,
26- LIB_VERSION = '1.3 ' ,
26+ LIB_VERSION = '1.4 ' ,
2727 LIB_NAME = 'MiniProgram' ;
2828
2929var source_channel_standard = 'utm_source utm_medium utm_campaign utm_content utm_term' ;
@@ -95,11 +95,13 @@ sa.lib_version = LIB_VERSION;
9595
9696var logger = typeof logger === 'object' ? logger : { } ;
9797logger . info = function ( ) {
98- if ( typeof console === 'object' && console . log ) {
99- try {
100- return console . log . apply ( console , arguments ) ;
101- } catch ( e ) {
102- console . log ( arguments [ 0 ] ) ;
98+ if ( sa . para . show_log ) {
99+ if ( typeof console === 'object' && console . log ) {
100+ try {
101+ return console . log . apply ( console , arguments ) ;
102+ } catch ( e ) {
103+ console . log ( arguments [ 0 ] ) ;
104+ }
103105 }
104106 }
105107} ;
@@ -503,7 +505,6 @@ _.base64Encode = function (data) {
503505} ;
504506
505507_ . getQueryParam = function ( url , param ) {
506- url = _ . decodeURIComponent ( url ) ;
507508 var regexS = "[\\?&]" + param + "=([^&#]*)" ,
508509 regex = new RegExp ( regexS ) ,
509510 results = regex . exec ( url ) ;
@@ -556,12 +557,31 @@ _.getPrefixUtm = function (utms, prefix, prefix_add) {
556557 } ;
557558}
558559
560+ _ . convertObjToParam = function ( obj ) {
561+ var arr = [ ] ;
562+ for ( var i in obj ) {
563+ arr . push ( i + '=' + obj [ i ] ) ;
564+ }
565+ return arr . join ( '&' ) ;
566+ }
567+
559568_ . getSource = function ( url ) {
569+ if ( _ . isObject ( url ) ) {
570+ if ( _ . isEmptyObject ( url ) ) {
571+ return { } ;
572+ } else {
573+ url = _ . convertObjToParam ( url ) ;
574+ url = '?' + url ;
575+ }
576+ } else {
577+ url = _ . decodeURIComponent ( url ) ;
578+ }
579+
560580 var campagin_w = source_channel_standard . split ( ' ' ) ;
561581 var campaign_keywords = source_channel_standard . split ( ' ' ) ;
562582 var kw = '' ;
563583 var params = { } ;
564- url = _ . decodeURIComponent ( url ) ;
584+
565585 url = url . split ( '?' ) ;
566586 if ( url . length === 2 ) {
567587 url = url [ 1 ] ;
@@ -576,15 +596,34 @@ _.getSource = function (url) {
576596 }
577597 _ . each ( campaign_keywords , function ( kwkey ) {
578598 kw = _ . getQueryParam ( url , kwkey ) ;
599+ kw = _ . decodeURIComponent ( kw ) ;
579600 if ( kw . length ) {
580601 if ( _ . include ( campagin_w , kwkey ) ) {
581602 params [ kwkey ] = kw ;
582603 }
583604 }
584605 } ) ;
606+
585607 return params ;
586608} ;
587609
610+ _ . getObjFromQuery = function ( str ) {
611+ var query = str . split ( '?' ) ;
612+ var arr = [ ] ;
613+ var obj = { } ;
614+ if ( query && query [ 1 ] ) {
615+ _ . each ( query [ 1 ] . split ( '&' ) , function ( value ) {
616+ var arr = value . split ( '=' ) ;
617+ if ( arr [ 0 ] && arr [ 1 ] ) {
618+ obj [ arr [ 0 ] ] = arr [ 1 ] ;
619+ }
620+ } ) ;
621+ } else {
622+ return { } ;
623+ }
624+ return obj ;
625+ } ;
626+
588627_ . getUtm = function ( url , prefix1 , prefix2 ) {
589628 var utms = _ . getSource ( url ) ;
590629 var pre1 = { } ;
@@ -611,6 +650,29 @@ _.getMPScene = function (key) {
611650 key = String ( key ) ;
612651 return mp_scene [ key ] || key ;
613652} ;
653+
654+ _ . setUtm = function ( para , prop ) {
655+ var query = { } ;
656+ if ( para && _ . isObject ( para . query ) ) {
657+ query = _ . extend ( { } , para . query ) ;
658+ if ( para . query . q ) {
659+ _ . extend ( query , _ . getObjFromQuery ( para . query . q ) ) ;
660+ }
661+ }
662+ if ( para && _ . isObject ( para . referrerInfo ) && para . referrerInfo . extraData ) {
663+ var extraQuery = { } ;
664+ if ( _ . isObject ( para . referrerInfo . extraData ) && ! _ . isEmptyObject ( para . referrerInfo . extraData ) ) {
665+ extraQuery = para . referrerInfo . extraData ;
666+ } else if ( _ . isJSONString ( para . referrerInfo . extraData ) ) {
667+ extraQuery = JSON . parse ( para . referrerInfo . extraData ) ;
668+ }
669+ _ . extend ( query , extraQuery ) ;
670+ }
671+ var utms = _ . getUtm ( query , '$' , '$latest_' ) ;
672+ _ . extend ( prop , utms . pre1 ) ;
673+ return utms ;
674+ } ;
675+
614676_ . info = {
615677 properties : {
616678 $lib : LIB_NAME ,
@@ -1095,22 +1157,21 @@ function e(t, n, o) {
10951157function appLaunch ( para ) {
10961158 this [ sa . para . name ] = sa ;
10971159 var prop = { } ;
1098-
10991160 if ( para && para . path ) {
11001161 prop . $url_path = para . path ;
11011162 }
1102- // 暂时只解析传统网页渠道的query
1103- if ( para && _ . isObject ( para . query ) && para . query . q ) {
1104- var utms = _ . getUtm ( para . query . q , '$' , '$latest_' ) ;
1105- _ . extend ( prop , utms . pre1 ) ;
1106- if ( is_first_launch ) {
1163+ var utms = _ . setUtm ( para , prop ) ;
1164+ if ( is_first_launch ) {
1165+ if ( ! _ . isEmptyObject ( utms . pre1 ) ) {
11071166 sa . setOnceProfile ( utms . pre1 ) ;
11081167 }
1168+ }
1169+ if ( ! _ . isEmptyObject ( utms . pre2 ) ) {
11091170 sa . registerApp ( utms . pre2 ) ;
11101171 }
11111172 prop . $scene = _ . getMPScene ( para . scene ) ;
11121173 // console.log('app_launch', JSON.stringify(arguments));
1113- if ( sa . para . autoTrack && sa . para . autoTrack . appLaunch === true ) {
1174+ if ( sa . para . autoTrack && sa . para . autoTrack . appLaunch ) {
11141175 sa . autoTrackCustom ( 'appLaunch' , prop , '$MPLaunch' ) ;
11151176 }
11161177
@@ -1126,26 +1187,27 @@ function appShow(para) {
11261187 prop . $url_path = para . path ;
11271188 }
11281189
1129- // 暂时只解析传统网页渠道的query
1130- if ( para && _ . isObject ( para . query ) && para . query . q ) {
1131- var utms = _ . getUtm ( para . query . q , '$' , '$latest_' ) ;
1132- _ . extend ( prop , utms . pre1 ) ;
1190+ var utms = _ . setUtm ( para , prop ) ;
1191+
1192+ if ( ! _ . isEmptyObject ( utms . pre2 ) ) {
11331193 sa . registerApp ( utms . pre2 ) ;
11341194 }
1195+
11351196 prop . $scene = _ . getMPScene ( para . scene ) ;
1136- if ( sa . para . autoTrack && sa . para . autoTrack . appShow === true ) {
1197+ if ( sa . para . autoTrack && sa . para . autoTrack . appShow ) {
11371198 sa . autoTrackCustom ( 'appShow' , prop , '$MPShow' ) ;
11381199 }
11391200} ;
11401201
11411202function appHide ( ) {
1203+
1204+
11421205 var current_time = ( new Date ( ) ) . getTime ( ) ;
11431206 var prop = { } ;
11441207 if ( mpshow_time && ( current_time - mpshow_time > 0 ) && ( ( current_time - mpshow_time ) / 3600000 < 24 ) ) {
11451208 prop . event_duration = ( current_time - mpshow_time ) / 1000 ;
11461209 }
1147- if ( sa . para . autoTrack && sa . para . autoTrack . appHide === true ) {
1148-
1210+ if ( sa . para . autoTrack && sa . para . autoTrack . appHide ) {
11491211 sa . autoTrackCustom ( 'appHide' , prop , '$MPHide' ) ;
11501212 }
11511213 // console.log('app_hide', JSON.stringify(arguments));
@@ -1205,9 +1267,13 @@ function pageOnShareAppMessage(n, e) {
12051267var v = Page ;
12061268Page = function ( t ) {
12071269 e ( t , "onLoad" , function ( para ) {
1208- // 暂时只解析传统网页渠道的query
1209- if ( para && _ . isObject ( para ) && para . q ) {
1210- this . sensors_mp_load_utm = _ . getUtm ( para . q , '$' ) . pre1 ;
1270+ if ( para && _ . isObject ( para ) ) {
1271+ var query = _ . extend ( { } , para ) ;
1272+ if ( para . q ) {
1273+ _ . extend ( query , _ . getObjFromQuery ( para . q ) ) ;
1274+ }
1275+ var utms = _ . getUtm ( query , '$' , '$latest_' ) ;
1276+ this . sensors_mp_load_utm = utms . pre1 ;
12111277 }
12121278 } ) ;
12131279
0 commit comments