如何将 hotjar 与 ember 一起使用?

How to use hotjar with ember ?

我需要使用 hotjar 来工作,但我在设置它时遇到了一些困难。该项目是一个 ember 项目,我发现这个项目集成了 hotjar : https://github.com/byrnedo/ember-hotjar

在这个 github 页面中,它说:"in routes and controller you will have _hj.push available",但我无法让它工作,而且我找不到任何关于如何设置它的信息。

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

hotjar: {
  id: my-id
},

在路线中,如果我这样做:

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

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

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

这意味着 hotjar 已成功安装,但是当我尝试执行类似 :

的操作时
this.get('_hj').push('trigger', 'hello_world');

出现错误:

Uncaught TypeError: this.get(...).push is not a function

有谁知道如何让它工作或者我是否做错了什么?

Uncaught TypeError: this.get(...).push is not a function

是您尝试调用 .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。这是在 ember 的依赖注入容器中注册的,键为 hotjar:main 作为共享对象(即 hotjar:main 持有对已实例化对象的引用,而不是工厂)。然后,由于 inject,所有路由和所有控制器都通过 this._hj 访问所述对象。有关详细信息,请参阅指南的 registration or the injections 部分。

所以现在,我们需要调查导出 hj

main.js 函数
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)}; 分配给 hjwindow.hj,这最终意味着在您的控制器中,this._hj === function(){(window.hj.q=window.hj.q||[]).push(arguments)};

看到所有这些,我不太确定您希望 push 做什么。我想你可能只想要 this._hj('trigger', 'hello_world')?祝你好运