我有一个旧项目是很久以前编写的,并使用管道字符( | )作为某些数据之间的分隔符。
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
.
请注意:
- 字符串中的每一行都以
\
结尾,这对于字符串中的换行符是必需的。 (您也可以删除换行符,但我认为这样可读性较差。) - 您确实需要在脚本顶部添加注释来解释为什么会发生这种情况,因为这是一个拼凑,下一个查看您代码的人将会看到
eval
并且理所当然地想知道这是怎么回事。
关于javascript - 从跟踪代码中删除管道字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27236087/