在某些情況下,例如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'];