Zac*_*iro 5 javascript google-chrome google-chrome-extension google-chrome-devtools mixpanel
在过去的一天里,我一直在努力解决这个问题,在线整合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撰写的内容安全策略文档,该文档没有任何帮助
知道我在这里做错了吗?任何帮助将非常感谢!
这里的问题是Chrome不允许扩展通过普通HTTP加载远程资源 ; 仅允许HTTPS:
由于中间人攻击在HTTP上都是微不足道的,而且无法检测到,
http:因此不会接受这些[即]来源.
您的mixpanel.js脚本尝试加载http://cdn.mxpnl.com/libs/mixpanel-2.2.min.js而不是相应的https:链接.要解决此问题,只需更改行:
a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js'
Run Code Online (Sandbox Code Playgroud)
至:
a.src='https://cdn.mxpnl.com/libs/mixpanel-2.2.min.js'
Run Code Online (Sandbox Code Playgroud)
它目前正在加载http:版本,因为window.location.protocol是chrome-extension:,而不是https:.此更改只会强制加载https:版本.
上面的回答不完整。你必须再做一件事。
做其他答案告诉你做的事情,更改混合面板代码,更改
http://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js
为
https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js
manifest.json更新content_security_policy您的manifest.json:
{
...,
"content_security_policy": "script-src 'self' https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js; object-src 'self'",
...
}
这放宽了默认的内容安全策略。
如果您还需要 Google Analytics,可以这样添加:
{
...,
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js; object-src 'self'",
...
}
我从 Google 自己的关于如何添加 Google Analytics的教程中学习了如何做到这一点。
| 归档时间: |
|
| 查看次数: |
3371 次 |
| 最近记录: |