检查是否已加载Mixpanel库

时间:2015-08-25 11:58:36

标签: javascript mixpanel

我们的网站正在使用mixpanel进行跟踪。

var mixPanelId = mixpanel.get_distinct_id();
$('#trial, #order').each(function () {
  $(this).append("<input type='hidden' value='"+mixPanelId+"' name='MixpanelId' />");
});

但是,如果未加载mixpanel,则主对象没有 get_distinct_id 。处理这种情况最正确的方法是什么?

到目前为止,我正在进行正常的js属性检查(但我想知道Mixpanel是否有更正确的方法):

mixpanel.hasOwnProperty('get_distinct_id')

3 个答案:

答案 0 :(得分:1)

正确的方法是使用init属性,该属性将在加载库后触发。有关详细信息,请参阅How to prevent get_distinct_id & get_property from returning undefined

mixpanel.init('token-id', {'loaded':function() {
    var distinct_id = mixpanel.get_distinct_id();
}})

检查属性并不是处理情况的正确方法。您可以在加载库之前进行此检查。

mixpanel.hasOwnProperty('get_distinct_id')

答案 1 :(得分:0)

我不知道mixpanel是否有一个onload(或左右)回调(在引用中没有看到),所以你可以做的就是调用以检查变量是否已设置。

警告:使用起来有点脏。

var _mixpanelcomplete = setInterval(function(){
    if(mixpanel.hasOwnProperty('get_distinct_id'))
    {
        clearInterval(_mixpanelcomplete);
        //init your stuff here
    }
},100);

答案 2 :(得分:0)

这是我的建议,适合那些试图运行依赖于混合面板distinct_id的代码的人:

function method1( var1, counter ) {
    if ( typeof counter == "undefined" || counter == null )
        var counter = 0;
    try {
        var mixpanel_distinct_id = mixpanel.get_distinct_id();
        // Code that is dependent on distinct_id goes here
    } catch(e) {
        var max_attempts = 40; // How long do you want it to try before letting it fail
        counter++;
        if ( counter < max_attempts )
            setTimeout( function(){ method1(var1, counter) }, 50);
    }
}