我的代码看起来像这样:
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<ul class="nav pull-right">
<% if user_signed_in? %>
<li class="dropdown" id="menu7">
<a class="dropdown-toggle" id="username" data-toggle="dropdown" href="#">
<%= current_user.full_name %>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><%= link_to('Edit my account', edit_user_registration_path,
:id => 'edit_account') %></li>
<li><%= link_to('Logout', destroy_user_session_path, :method => 'delete',
:id => 'logout_link') %></li>
</ul>
</li>
<% else %>
<li><%= link_to('Login', new_user_session_path, :id => 'login_link') %></li>
<li><%= link_to('Sign up', new_user_registration_path, :id => 'signup_link') %></li>
<% end %>
</ul>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的javascript事件是这些:
mixpanel.track_links('#username', 'Username clicked')
mixpanel.track_links('#edit_account', …Run Code Online (Sandbox Code Playgroud) 如何告诉mixpanel我登录用户的用户ID?
我是否需要在mixpanel.people.identify()用户每次登录时调用,或者仅在我第一次在mixpanel上创建它们时调用?
如果只是第一次,mixpanel如何知道谁将事件关联到?
此外,一旦我识别出该人,所有事件是否都可以追踪到该人,或者我是否需要people.set()明确调用以跟踪与用户特定事件分开的通用事件?
在过去的一天里,我一直在努力解决这个问题,在线整合Chrome扩展程序和Mixpanel的资源几乎没有.我希望在处理将Mixpanel集成到Chrome扩展程序时,人们可以参考这个主题.
我Mixpanel一体化的目标是能够跟踪事件都与我的内容脚本content.js,以及我的popup.js(所以基本上在我的整个扩展)
我有一个<script src="mixpanel.js"></script>在</head>标签之前调用的popup.html文件.
在我的mixpanel.js文件中是:
(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==
typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,
e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);
mixpanel.init("MY_TOKEN");
Run Code Online (Sandbox Code Playgroud)
当我单击我的扩展按钮并检查它时,控制台输出以下错误:
Refused to load the script 'http://cdn.mxpnl.com/libs/mixpanel-2.2.min.js' because it violates the following Content Security Policy directive: "script-src 'self' https://cdn.mxpnl.com".
Run Code Online (Sandbox Code Playgroud)
这是我的manifest.json文件的权限部分:
"permissions": ["https://twitter.com/"],
"content_security_policy": "script-src 'self' https://cdn.mxpnl.com; object-src 'self'"
Run Code Online (Sandbox Code Playgroud)
扩展需要在Twitter上运行.
我已经阅读了Google撰写的内容安全策略文档 …
javascript google-chrome google-chrome-extension google-chrome-devtools mixpanel
在尝试在本地测试 mixpanel 分析时,我遇到了请求被取消的问题(状态代码:0)。
故障排除:
(注:我设置了 KISSmetrics 进行本地测试,没有任何问题)
我没有设置ID并为每个链接设置单独的跟踪事件(我的代码经常更改),我想知道是否有一种方法可以将Mixpanel设置为跟踪所有链接(甚至是按钮)并获取值链接,eg "/readmore"以便我不必为每种可能性编码.
我查看了Mixpanel Javascript API参考,并阅读了关于mixpanel.track_links的内容,这对于我正在寻找的内容似乎是正确的方向,但是我必须指定一个"name"可以注册所有具有相同名称的事件的前端?
以下是mixpanel api参考中的一些示例代码:
// with properties function
mixpanel.track_links
("#footer", "Footer link", function(ele) { return { type: $(ele).attr('type')}});
Run Code Online (Sandbox Code Playgroud)
我想"#footer"用say "a"ie 替换所有链接,然后返回要返回的链接的值.
这甚至可能吗?
我们希望使用MixPanel来捕获我们网站上的事件,并且我试图获取用户的不同ID,因此我使用以下代码片段:
$(document).ready(function($){
console.log("We have distinct id");
console.log(mixpanel.get_distinct_id());
});
Run Code Online (Sandbox Code Playgroud)
当尝试获取不同的id时,这会导致错误"未定义不是函数".
我已经检查了调试器,并且可以确认mixpanel对象没有get_distinct_id方法,但是如果我等到页面已经加载然后在控制台中评估mixpanel.get_distinct_id(),我会得到不同的id而没有问题.
我只能猜测mixpanel对象还没有完成初始化.一旦mixpanel对象能够告诉我用户distinct_id,是否有我可以用来知道的回调或事件?
除了"从和日期",我想进一步从部分事件信息Mixpanel出口()API方法通过他们的时间(事件包含"时间"属性,表示为unix时间戳); 但是,例如,当我指定一个"where"参数时,我得到一个空响应(见下文).
"where"param ='properties ["time"]> = 1401642000'
我肯定有与此相匹配的活动.这应该有用吗?
没有"where"参数:
args = {'from_date':'2014-06-01','api_key':'删除','sig':'删除','to_date':'2014-06-04','过期':1402424767}
响应= [我收到预期的事件]
'where'param ='properties ["time"]> = 1401642000'
args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'删除','其中':'属性["time"]> = 1401642000'}
response = [HTTP请求成功,但响应为空]
与上面相同,除了将时间值放在引号中:
'where'param ='properties ["time"]> ="1401642000"'
args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'删除','其中':'属性["time"]> ="1401642000"'}
response = [HTTP请求成功,但响应为空]
尝试将属性["time"]转换为数字:
'where'param ='number(properties ["time"])> = 1401642000'
args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'删除','其中':'数字(属性["时间"])> = 1401642000'}
response = [HTTP请求成功,但响应为空]
我正在使用MixPanel发送推送通知,并在自定义有效负载上添加以下代码:{"sound":"default"}问题是当我收到通知时没有声音播放.有人有解决方案吗?
我的Rails应用程序中有一些JS代码,可以在新会话中向Mixpanel发出跟踪事件.
从理论上讲,在任何其他事件被触发之前,我应该首先看到"新会话"事件.但在一些访问中,我没有看到"新会议"事件,这意味着它在某些情况下没有被解雇.
以下代码有什么问题?
$(function(){
var currentLocation = window.location.hostname;
var lastLocation = document.referrer;
if (lastLocation.indexOf(currentLocation) > -1) {
} else {
mixpanel.track("New Session", {});
}
mixpanel.track("Page View", {});
});
Run Code Online (Sandbox Code Playgroud) 
Mixpanel错误:"mixpanel"对象未初始化.确保您使用的是最新版本的Mixpanel JS库以及我们提供的代码段.