creator 动态加载talkingdata统计


creator 动态加载talkingdata统计

==实测可行==

  • h5游戏加载速度决定了一个游戏的核心体验,所以需要尽量减少index.html加载的内容
  • 目前talkingdata的h5统计代码是直接写在index.html里的,所以以下讨论如何异步加载他

原talkingdata加载:

1
2
3
<!-- talkingdata -->
<script src="https://h5.talkingdata.com/g/h5/v1/XXXXXXXXXXXXXXXXXXX" type="text/javascript"></script>
<!-- End talkingdata -->

查看其中的实际加载后内容为:

1
2
3
4
5
6
7
8
var sequenceNumber='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var appDisplayName='';
var DTGAbaseUrl='https://h5.talkingdata.com/websdk';
var DTGARequestUrl='https://h5.udrig.com/g/v1';
document.write('<script src='+DTGAbaseUrl+'/js/sdk_release.js?v=1.0.5></script>');
if(!window['JSON'] || typeof JSON !== 'object'){
document.write('<script src='+DTGAbaseUrl+'/js/json2.js></script>');
}

因为内容中有document.write方法,所以不能直接动态加载https://h5.talkingdata.com/g/h5/v1/XXXXXXXXXXXXXXXXXXX

可以直接执行加载后的内容,然后动态加载document.write里面的内容

新的加载写到creator的js中:

  1. 全局变量定义

creator中的全局变量定义并不能被talkingdata中的js所使用,需要用如下方法定义:

1
2
3
4
window.sequenceNumber = 'XXXXXXXXXXXXXXXXXXXXXXXX'; 
window.appDisplayName = '';
window.DTGAbaseUrl = 'https://h5.talkingdata.com/websdk';
window.DTGARequestUrl = 'https://h5.udrig.com/g/v1';
  1. 动态加载document.write里的内容
1
2
3
4
5
let td = document.createElement('script');
td.type = 'text/javascript';
td.src = DTGAbaseUrl + '/js/sdk_release.js?v=1.0.5';
let node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(td, node);
  1. 等待动态加载成功后,执行talkingdata里面的方法即可
1
2
3
4
5
6
7
8
9
10
if (typeof TDGA === 'undefined') return;
TDGA.Account({
accountId: 'xxxxxx',
accountName: 'xxxxxxx',
accountType : 1,
age : 24,
gender : 1
level : 1,
gameServer: 'xxxxxx',
});