在某些情況下,例如SDK尚未完成初始化時,會導致數據上報出現問題。本文介紹如何使用ARMS前端監控SDK實現數據預上報。
會導致數據上報出現問題的情形
以下情形會導致數據上報出現問題:
- 在頁面剛剛加載時,有一些數據需要上報,但此時SDK可能還未完成初始化,或者不確定是否已完成初始化。
- 在應用的初始化邏輯中調用setConfig方法,但由于SDK是異步加載的,此時可能還未加載完成。
解決辦法
SDK在__bl
對象上增加了一個pipe屬性,用于將預調用的信息緩存到此變量中。例如:
__bl.pipe = [
// 將當前頁面的HTML也作為一個API上報。
['api', '/index.html', true, performance.now, 'SUCCESS'], //相當于__bl.api(api, success, time, code, msg)。
// SDK初始化完成后即開啟SPA自動解析。
['setConfig', {enableSPA: true}]
];
如果只上報單條數據,也可以直接寫成:
__bl.pipe = ['msg', '我是另一個普通的消息'];
其中數組的第0個表示方法名,后面依次是入參。SDK初始化完成后,就會依次調用預先掛載到window.__bl.pipe
上的方法及參數。
說明 在SDK初始化完成前,如果多次設置
__bl.pipe
的值,則以最后設置的為準。
如果不能確定SDK是否初始化完成,又不想添加太多判斷邏輯,也可以在SDK初始化完成后調用pipe(支持IE9及以上)。
例如,單頁面應用中,設置autoSend: false
后,在應用初始化后上報第一次PV,此時并不確定SDK是否初始化完成。
// 設置頁面name為 'homepage',并且上報PV。
__bl.pipe = ['setPage', 'homepage'];