我的问题如下:
我正在尝试计算我们时事通讯中广告的点击次数。问题是我不能在电子邮件中包含 js - 这是可以理解的。所以我通过编写这段代码找到了解决这个问题的方法:
<script type="text/javascript" src="http://www.factmag.com/wp-content/themes/modularity_/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
if($.inArray(hash[0], vars)>-1)
{
vars[hash[0]]+=","+hash[1];
}
else
{
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
}
return vars;
}
function redirect()
{
var link = getUrlVars()["page_url"];
setTimeout('document.location = "' + link + '"', 100)
}
</script>
<body onload="javascript:redirect();"></body>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-4340871-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
它托管在我们的服务器上,在时事通讯中,广告代码具有以下格式:
<a href="http://www.example.com/example_ad_counter/?utm_source=banner6&utm_medium=banner&utm_campaign=banner&page_url=ad_url"><img src="ad_img_url" style="border:1px solid #000;"></a>
所以我想在这里做什么:
现在这就是交易 - 谷歌分析在这里没有计算。我的猜测是我需要在 google js 中添加一些东西才能这样做,但不知道是什么。有人可以帮我解决这个问题吗?谢谢。
最佳答案
您想确保在调用 google 代码后调用重定向。目前,您让它在 onLoad 上运行。 yC 在他对可能是竞争条件的问题的评论中是正确的,但是推送您的 setTimeout
并不能完全解决该竞争条件。
您可以尝试在 google 将自身插入页面后调用您的重定向功能。
这里的代码:
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
...实际上是谷歌向您的页面添加了一个新的
script
标签,然后将分析网址加载到其中。 Brendon 建议关闭异步是正确的,但是我建议在 var s = document
行(在函数内部)之后添加您的重定向调用,并希望这能让谷歌有足够的时间在重定向之前完成其肮脏的工作。如果这不起作用,那么坚持 yC 的建议并进一步推迟超时。只知道重定向延迟与谷歌脚本加载然后运行所需的时间竞争,这是不可预测的。我可能会将 setTimeout 放在我建议直接调用重定向函数的同一个地方。这意味着它甚至不会开始计算延迟,直到将 google 的分析脚本添加到页面中。