javascript - 从跟踪代码中删除管道字符?

标签 javascript google-analytics

我有一个旧项目是很久以前编写的,并使用管道字符( | )作为某些数据之间的分隔符。

Google Analytics 跟踪代码包含管道字符:

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', '', 'auto');
ga('send', 'pageview');

</script>

当我向项目提供跟踪代码时,由于使用了管道字符,它会出现错误。

是否可以从跟踪代码中删除/替换 2 个管道字符,但保持跟踪代码正常运行?

这会让我在旧代码中省去很多麻烦;-)

最佳答案

修复被 | 绊倒的代码会好多更好字符。

一个糟糕但有效的替代方案是将代码放入字符串中,但替换每个 |具有等效的 unicode 转义序列,即 \u007C .

// EXPLANATORY COMMENT GOES HERE
var scriptEncoded =
"(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]\u007C\u007Cfunction(){ \
(i[r].q=i[r].q\u007C\u007C[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), \
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) \
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');";

eval(scriptEncoded);

ga('create', '', 'auto');
ga('send', 'pageview');

如果还不清楚,这是可行的,因为在 JavaScript 中,就像在许多语言中一样,you can use a Unicode escape sequence作为任何 Angular 色的替代品。例如,console.log("\u0066\u006F\u006F")将打印foo到控制台,因为这些是 f 的转义序列和o .

请注意:

  1. 字符串中的每一行都以 \ 结尾,这对于字符串中的换行符是必需的。 (您也可以删除换行符,但我认为这样可读性较差。)
  2. 确实需要在脚本顶部添加注释来解释为什么会发生这种情况,因为这是一个拼凑,下一个查看您代码的人将会看到 eval并且理所当然地想知道这是怎么回事。

关于javascript - 从跟踪代码中删除管道字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27236087/

相关文章:

javascript - Phonegap 文件 API 未返回正确路径仅​​返回 '/'

google-analytics - AMP页面上的Google Analytics(分析)未报告流量

google-analytics - 在 Google Analytics Web UI 中获取深入分析报告的链接

javascript - javascript Class "chzn-select"不仅仅是一个类名吗?

javascript - ajax调用wcf服务出错

javascript - ECMAScript : Some questions about Job and Job queue

php - 您可以在 Google Analytics 中存储表单选择吗?

google-analytics - Google Analytics - 目标 URL 的头部匹配是实际 URL 的任何子字符串

google-analytics - 将自定义数据发送到谷歌分析

JavaScript 没有从 JQuery-AJAX 中捕获正确的列表项