我需要使用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');
有人知道如何使它工作或我做错了什么吗?
答案 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
访问该对象。有关更多信息,请参见指南的registration或the 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')
?祝你好运