1. 開啟全埋點

1.1. 程式碼範例

<script>
(function(para) {
    var p = para.sdk_url, n = para.name, w = window, d = document, s = 'script',x = null,y = null;
    w['sensorsDataAnalytic201505'] = n;
    w[n] = w[n] || function(a) {return function() {(w[n]._q = w[n]._q || []).push([a, arguments]);}};
    var ifs = ['track','quick','register','registerPage','registerOnce','clearAllRegister','trackSignup', 'trackAbtest',    'setProfile','setOnceProfile','appendProfile', 'incrementProfile', 'deleteProfile', 'unsetProfile',     'identify','login','logout','trackLink','clearAllRegister'];
    for (var i = 0; i < ifs.length; i++) {
        w[n][ifs[i]] = w[n].call(null, ifs[i]);
    }
    if (!w[n]._t) {
        x = d.createElement(s), y = d.getElementsByTagName(s)[0];
        x.async = 1;
        x.src = p;
        w[n].para = para;
        y.parentNode.insertBefore(x, y);
    }
})({
    sdk_url: '在 github 下載新版本的 sensorsdata.min.js ',
    name: 'sensors',
    server_url:'數據接收網址',
    heatmap: {
        //default 表示開啟,自動採集 $WebClick 事件,可以設定 'not_collect' 表示關閉。
        clickmap:'default',
        //default 表示開啟,自動採集 $WebStay 事件,可以設定 'not_collect' 表示關閉。
        scroll_notice_map:'default'
    }
});
//呼叫程式碼之後,SDK 就會自動收集頁面瀏覽事件,以及設定初始來源。
sensors.quick('autoTrack');
</script>
JS

Web JS SDK 全埋點包括三種事件:Web 頁面瀏覽、Web 元素點擊、Web 視區停留,單獨對應的設定如下。

1.2. Web 頁面瀏覽($pageview)

// 設定之後,SDK 就會自動收集頁面瀏覽事件,以及設定初始來源。
sensors.quick('autoTrack')

// 另外,如果想加額外的屬性,可以如下方式(增加 platform 屬性為 h5)
sensors.quick('autoTrack', {
	platform:'h5'
})
JS

1.3. Web 元素點擊($WebClick)

// SDK 初始化參數設定
heatmap: {
	//是否開啟點擊圖,default 表示開啟,自動採集 $WebClick 事件,可以設定 'not_collect' 表示關閉。
	clickmap:'default'
}
JS

1.4. 視區停留事件($WebStay)

// SDK 初始化參數設定
heatmap: {
//是否開啟觸達注意力圖,default 表示開啟,自動採集 $WebStay 事件,可以設定 'not_collect' 表示關閉。
//需要 Web JS SDK 版本大於 1.9.1
	scroll_notice_map:'default'
}
JS
  • 如果發生頁面滾動時候,之前的頁面停留是有效停留,也就是超過預設的 4 秒或者自定義的時間,javascript SDK 就會傳送一次頁面停留事件。
  • 關閉頁面時,傳送一次頁面停留事件。神策 $WebStay 事件的採集是基於在 window 上綁定的 scroll 事件,如果頁面滾動是綁定在 div 上,則無法採集。


2. 其他元素類型的元素點擊事件採集

2.1. 支援 div 類型元素的自動採集

版本要求

Web JS SDK v1.15.15 及以上版本

在原來的全埋點(採集 a、button、input 、textarea 標籤)基礎上新增對 div 標籤的採集,採集規則為:

  1. div 為葉節點(無子元素)時採集 div 的點擊
  2. div 中有且只有樣式標籤時,點擊 div 或者樣式標籤都採集 div 的點擊

透過 collect_tags 設定是否開啟 div 的全埋點採集,預設不採集。如需採集 div ,設定  collect_tags 參數如下注意:只支援設定 div

heatmap:{  
        collect_tags:{
              div : true
        }
}
JS

2.2. 支援其他類型元素的自動採集

2.2.1. 設定特殊屬性:data-sensors-click

開點全埋點時,給需要自動採集點擊事件的元素增加屬性:data-sensors-click(備註:增加該屬性無法讓元素可以可視化全埋點)

版本要求

Web JS SDK 1.14.23 及以上版本

程式碼範例如下:

<div name='test' data-sensors-click>我是測試元素</div>
<li data-sensors-click class='test-li'>我是測試元素</li>
XML

2.2.2. 設定自定義屬性

開點全埋點時,支援設定帶有指定屬性的頁面元素點擊,自動採集點擊事件(備註:增加該屬性無法讓元素可以可視化全埋點)。

版本要求

Web JS SDK 1.15.25 及以上版本

程式碼範例如下:

<script src="xxxx/xxx/sensorsdata.js"></script>
<script>
var sensors = sensorsDataAnalytic201505;
sensors.init({
  server_url: 'SERVER_URL', 
  heatmap: {
    track_attr: ['hotrep', 'anotherprop', "data-prop2"],
    clickmap:'default',
    scroll_notice_map: 'not_collect'
  }
});
</script>
...
<p hotrep id="test1">hotrep p tag</p>
<p><span anotherprop id="test2">another repo a.b.c</span></p>
<p><strong data-prop2 id="test3">strong with prop2 attribute</strong></p>
CODE

2.3. 程式碼埋點觸發元素點擊事件

如果你想要對非 a input button textarea 的其他元素採集點擊事件的話,請在元素發生點擊的時候,呼叫我們的這個方法。

// 下面示範一個 div 標籤被點擊時觸發預設的元素點擊事件
<div id="submit_order">提交訂單</div>

<script type="text/javascript">
$('#submit_order').on('click', function() {
	sensors.quick('trackHeatMap', this, {
		customProp1: 'test1', //如果需要增加自定義屬性需要將 SDK 升級到 1.13.7 及以上版本。
		customProp2: 'test2'
	}, function() {
	console.log('callback');
	});
});
</script>
XML


// 注意: 在原生js中呼叫我們綁定的click事件時this指向的是元素節點,在其他框架採集點擊事件時this指針也應該指向相應的元素節點,例如在vue中可以參考下面範例。

<div v-on:click="track">點擊</div>

<script>
export default {
	methods: {
		track: function(event) {
			sensors.quick('trackHeatMap', event.target, {
				customProp1: 'test1', //如果需要增加自定義屬性需要將 SDK 升級到 1.13.7 及以上版本。
				customProp2: 'test2'
			}, function() {
				console.log('callback');
			});
		}
	}
}
</script>
XML


1.12.14 及以上版本的 SDK 增加新方法 trackAllHeatMap ,當呼叫這個方法時,此方法的第二個參數可以傳入包括 a, input, button, textarea 標籤和 div,img 等的所有標籤。而 trackHeatMap 只採集除 a, input, button,textarea 之外的標籤。同時,這兩個方法均可以設定自定義屬性,且支援回呼函數(這兩個方法的第四個參數都可以傳入一個方法)。

// 下面示範一個 button 按鈕被點擊時觸發預設的元素點擊事件
<button id="testp">測試按鈕</button>

<script type="text/javascript">
$('#testp').on('click', function() {
	sensors.quick('trackAllHeatMap', this, {
		customProp1: 'test1', //如果需要增加自定義屬性需要將 SDK 升級到 1.13.7 及以上版本。
		customProp2: 'test2'
	}, function() {
		console.log('callback');
	});
});
</script>
XML

3. 全埋點相關參數設定

3.1. Web 元素點擊

3.1.1. heatmap 相關參數,提供了對於 $WebClick 事件的自定義設定和處理。

heatmap 相關參數說明:

參數名參數值說明備註
clickmap是否開啟點擊圖,預設 default 表示開啟,可以設定 'not_collect' 表示關閉。需要 Web JS SDK 版本大於 1.7
scroll_notice_map是否開啟觸達注意力圖,設定 default 表示開啟,設定 'not_collect' 表示關閉。需要 Web JS SDK 版本大於 1.9.1
loadTimeout毫秒設定多少毫秒後開始渲染點擊圖,因為剛打開頁面時候頁面有些元素還沒加載。
collect_url回傳真會採集當前頁面的元素點擊事件,回傳假表示不採集當前頁面,設定這個函數後,內容為空的話,是回傳假的。不設定函數預設是採集所有頁面。
collect_element用戶點擊頁面元素時會觸發這個函數,讓你來判斷是否要採集當前這個元素,回傳真表示採集,回傳假表示不採集。
custom_property假如要在 $WebClick 事件增加自定義屬性,可以透過標籤的特徵來判斷是否要增加。注意:如果同時使用了 trackAllHeatMap 或者 trackHeatMap 方法設定了自定義屬性,那麼這 兩個方法 中的自定義屬性物件會覆蓋 custom_property 回傳值中的同名屬性,它的優先級更高。
collect_input考慮到用戶隱私,這裡可以設定 input 裡的內容是否採集。如果回傳真,表示採集 input 內容,回傳假表示不採集 input 內容,預設不採集。
element_selectorSDK 預設優先以元素 ID 作為選擇器採集點擊事件,若不想以 ID 作為選擇器,可以設定該參數為 'not_use_id'。1.14.12 以上版本支援。
renderRefreshTime毫秒第二版點擊圖滾動滾動條,改變頁面尺寸後延時多少毫秒重新渲染頁面。


heatmap 相關參數程式碼範例:

heatmap: {
    clickmap: 'default',
    scroll_notice_map: 'default',
    loadTimeout: 3000,
    collect_url: function(){
        // 如果只採集首頁
        if(location.href == = 'xxx.com/index.html' | | location.href == = 'xxx.com/'){
            return true
        }
    },
    // 此參數針對預設 $WebClick 事件(包括 quick('trackHeatMap') quick('trackAllHeatMap') 觸發的)生效。
    collect_element: function(element_target){
        // 如果這個元素有屬性sensors-disable = true時候,不採集。
        if(element_target.getAttribute('sensors-disable') == = 'true'){
            return false
        }else{
            return true
        }
    },
    // 此參數針對預設 $WebClick 事件(包括 quick('trackHeatMap') quick('trackAllHeatMap') 觸發的)生效。
    custom_property: function(element_target){
        // 比如您需要給有 data = test 屬性的標籤的點擊事件增加自定義屬性 name: 'aa' ,則程式碼如下:
        if(element_target.getAttribute('data') == = 'test'){
            return {
                name: 'aa'
            }
        }
    },
    collect_input: function(element_target){
        // 例如如果元素的 id 是a,就採集這個元素裡的內容。
        if(element_target.id == = 'a'){
            return true
        }
    },
    element_selector: 'not_use_id',
    renderRefreshTime: 1000
}
JS

3.2. Web 視區停留

3.2.1. 相關參數說明:

scrollmap 相關參數說明:

參數名參數值說明備註
collect_url回傳真會採集當前頁面的數據,回傳假表示不採集當前頁面,設定這個函數後,內容為空的話,是回傳假的。不設定函數預設是採集所有頁面。


heatmap 相關參數說明:

參數名參數值說明備註
scroll_notice_map是否開啟觸達圖,設定 default 表示開啟,設定 'not_collect' 表示關閉。需要 Web JS SDK 版本大於 1.9.1
scroll_delay_time毫秒設定觸達圖的有效停留時間,預設超過 4 秒以上算有效停留。
scroll_event_duration預設屬性停留時長 event_duration 的最大值,預設 18000 秒,5 小時。

scrollmap 和 heatmap 相關程式碼範例:

scrollmap: {
    collect_url: function(){
        // 如果只採集首頁
        if(location.href == = 'xxx.com/index.html' | | location.href == = 'xxx.com/'){
            return true
        }
    },
},
heatmap: {
    // 是否開啟觸達注意力圖,default 表示開啟,自動採集 $WebStay 事件,可以設定 'not_collect' 表示關閉。
    // 需要 Web JS SDK 版本大於 1.9.1
    scroll_notice_map: 'not_collect',
    scroll_delay_time: 4000,
    scroll_event_duration: 18000 // 單位秒,預設屬性停留時長 event_duration 的最大值。預設5個小時,也就是300分鐘,18000秒。
}
JS

4. 單頁面中事件的自動採集

單頁面中事件的自動採集,可參考 Demo

4.1. Web 頁面瀏覽事件採集

4.1.1. 自動模式

設定參數 is_track_single_page (推薦使用這種模式),預設值為 false ,表示是否開啟自動採集 web 瀏覽事件 $pageview 的功能 。
其原理是修改 window 物件的 pushState 和 replaceState 原生方法,在頁面的 url 改變後自動採集 $pageview 事件,若用戶瀏覽器不支援這兩種方法或者是使用 hash 的路由模式,我們也會監聽 popstate 和 hashchange 事件來自動觸發 $pageview 事件。

使用方法範例:

//SDK版本1.12.18以上支援,預設值為false。
is_track_single_page:true
//注意預設的: sa.quick('autoTrack') 是需要的。
JS


SDK 版本大於等於 1.14.1  的 is_track_single_page 參數增加 function(){} 的設定,必須 return 一個值。
設定一:return true 表示當前頁面會傳送數據,
設定二:return false 表示不會發數據,
設定三:return {} 物件,表示會把物件的屬性新增到當前 $pageview 裡。

使用方法範例:

is_track_single_page : function (){
	return true 時候,使用預設傳送的 $pageview
	return false 時候,不執行預設的 $pageview
	return {} 時候,把物件中的屬性,覆蓋預設 $pageview 裡的屬性。
}
//注意預設的: sa.quick('autoTrack') 是需要的
JS


另外注意:
必須確保切換頁面前神策 Web JS SDK 的已經執行,否則的話可能第一次切換頁面不會觸發 $pageview。

4.1.2. 手動模式

在頁面切換的時候,手動呼叫 sensors.quick('autoTrackSinglePage') 來採集 web 瀏覽事件 $pageview ,這個方法在頁面 url 切換後呼叫。

// 比如現在是在 react 中可以在全域的 onUpdate 裡來呼叫。
onUpdate: function(){
    sensors.quick('autoTrackSinglePage')
}

//vue 專案在路由切換的時候呼叫。
router.afterEach((to, from)= > {
    Vue.nextTick(()= > {
        sensors.quick("autoTrackSinglePage")
    })
})
//注意: vue下因為首頁打開時候就會預設觸發頁面更新,所以需要去掉預設加的 sa.quick('autoTrack')。
JS


此方法也可增加自定義屬性,

sensors.quick("autoTrackSinglePage",{platForm:"H5"});
JS

4.2. 單頁面的頁面標題 $title 問題

對於單頁面專案,神策 SDK 全埋點的預設事件採集的頁面標題屬性,可能存在異常 。
具體問題:
1、title 如果沒有更新賦值,取得的 title 一直是主頁的 title 不會變化,切換頁面傳送的數據不會更新 $title 。
2、title 設定的時機晚於數據傳送的時機,切換頁面傳送的 $pageview 事件攜帶的 $title 值為上一個頁面的 title 。
解决方案:
在切換頁面前完成 title 值的更新(以常見的 vue 為例)

router.beforeEach((to, from, next) => { 
	document.title = '新頁面的 title 值';
	next() 
}) 
JS