如何将 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)};
分配给 hj
和 window.hj
,这最终意味着在您的控制器中,this._hj
=== function(){(window.hj.q=window.hj.q||[]).push(arguments)};
看到所有这些,我不太确定您希望 push
做什么。我想你可能只想要 this._hj('trigger', 'hello_world')
?祝你好运
我需要使用 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
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')
?祝你好运