如何在ember中使用hotjar?

时间:2018-11-20 10:36:02

标签: javascript ember.js statistics hotjar

我需要使用hotjar进行工作,但是设置起来有些困难。该项目是一个余烬项目,我发现该项目集成了hotjar:https://github.com/byrnedo/ember-hotjar

在此github页面上,它说:“在路由和控制器中,您将具有_hj.push可用”,但我无法使其正常工作,也找不到任何有关如何设置它的信息。

我在config / environment.js中添加了它:

new [] {...}

在一条路线上,如果我这样做:

hotjar: {
  id: my-id
},

我在控制台中得到了这个结果:

console.log(this.get('_hj'))

这意味着已成功安装hotjar,但是当我尝试执行以下操作时:

ƒ () {
    (window.hj.q = window.hj.q || []).push(arguments);
  }

出现错误:

this.get('_hj').push('trigger', 'hello_world');

有人知道如何使它工作或我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

  

未捕获的TypeError:this.get(...)。push不是函数

是您尝试在函数上调用.push的结果。如图所示,从您的console.log中,我们可以看到this.get('_hj')是一个函数,并且您尝试在其上调用.push。如果您尝试过,则会得到相同的错误:

let x = function(){ }
x.push()

无论如何,让我们深入了解它。该插件提供了一个初始化程序ember-hotjar,该初始化程序调用:

import hj  from '../hotjar/main';
...
let h =  hj.create();
application.register('hotjar:main', h, {instantiate: false});
application.inject('controller', '_hj', 'hotjar:main');
application.inject('route',      '_hj', 'hotjar:main');

使用任何hotjar/main导出来创建h。这是在键的hotjar:main作为共享对象的情况下在依赖项注入容器中注册的(例如,hotjar:main拥有对已实例化的对象的引用,而不是工厂的引用)。然后,由于inject,所有路由和所有控制器都通过this._hj访问该对象。有关更多信息,请参见指南的registrationthe injections部分。

所以现在,我们需要研究导出hj的{​​{3}}函数

var  hj = window.hj = window.hj || function(){(window.hj.q=window.hj.q||[]).push(arguments)};

...

export default {
  create:  function () {
    return hj;
  }
};

这是同时向window.hj || function(){(window.hj.q=window.hj.q||[]).push(arguments)};hj分配window.hj,这最终意味着在您的控制器中,this._hj === function(){(window.hj.q=window.hj.q||[]).push(arguments)};

因此,看完所有这些内容后,我真的不确定您期望push会做什么。我认为您可能只想this._hj('trigger', 'hello_world')?祝你好运