全埋點 (Web)
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>
Web JS SDK 全埋點包括三種事件:Web 頁面瀏覽、Web 元素點擊、Web 視區停留,單獨對應的設定如下。
1.2. Web 頁面瀏覽($pageview)
// 設定之後,SDK 就會自動收集頁面瀏覽事件,以及設定初始來源。
sensors.quick('autoTrack')
// 另外,如果想加額外的屬性,可以如下方式(增加 platform 屬性為 h5)
sensors.quick('autoTrack', {
platform:'h5'
})
1.3. Web 元素點擊($WebClick)
// SDK 初始化參數設定
heatmap: {
//是否開啟點擊圖,default 表示開啟,自動採集 $WebClick 事件,可以設定 'not_collect' 表示關閉。
clickmap:'default'
}
1.4. 視區停留事件($WebStay)
// SDK 初始化參數設定
heatmap: {
//是否開啟觸達注意力圖,default 表示開啟,自動採集 $WebStay 事件,可以設定 'not_collect' 表示關閉。
//需要 Web JS SDK 版本大於 1.9.1
scroll_notice_map:'default'
}
- 如果發生頁面滾動時候,之前的頁面停留是有效停留,也就是超過預設的 4 秒或者自定義的時間,javascript SDK 就會傳送一次頁面停留事件。
- 關閉頁面時,傳送一次頁面停留事件。神策 $WebStay 事件的採集是基於在 window 上綁定的 scroll 事件,如果頁面滾動是綁定在 div 上,則無法採集。
2. 其他元素類型的元素點擊事件採集
2.1. 支援 div 類型元素的自動採集
版本要求
Web JS SDK v1.15.15 及以上版本
在原來的全埋點(採集 a、button、input 、textarea 標籤)基礎上新增對 div 標籤的採集,採集規則為:
- div 為葉節點(無子元素)時採集 div 的點擊
- div 中有且只有樣式標籤時,點擊 div 或者樣式標籤都採集 div 的點擊
透過 collect_tags 設定是否開啟 div 的全埋點採集,預設不採集。如需採集 div ,設定 collect_tags 參數如下(注意:只支援設定 div):
heatmap:{
collect_tags:{
div : true
}
}
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>
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>
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>
// 注意: 在原生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>
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>
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_selector | SDK 預設優先以元素 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
}
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秒。
}
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') 是需要的。
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') 是需要的
另外注意:
必須確保切換頁面前神策 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')。
此方法也可增加自定義屬性,
sensors.quick("autoTrackSinglePage",{platForm:"H5"});
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()
})