我有一个基本的html页面,其中包含指向不同站点的链接 . 我想要做的是跟踪点击次数 . 我是通过在链接的Click事件上发送0像素图像调用而不在点击事件上返回false来实现的 .
除了Safari(在Windows操作系统上)之外,所有浏览器都能正常工作 .
当使用javascript点击链接时,我会延迟重定向并将图像请求发送到服务器并记录服务器端的点击 . 我已经尝试增加延迟但没有成功......跟踪器在所有浏览器上工作gr8,除了Safari之外根本没有发送请求 .
我不知道为什么,但可能它的safari等待在发出请求之前执行完整的js并且在整个js执行之后它被重定向....
================================================== =======
<html>
<head>
<script type="text/javascript">
function logEvent(){
image = new Image(1,1);
image.onLoad=function(){alert("Loaded");};
image.onLoad=function(){alert("Error");};
image.src='http://#path_to_logger_php#/log.php?'+Math.random(0, 1000) + '=' + Math.random(0, 1000);
pauseRedirect(500);
}
function pauseRedirect(millis){
var date = new Date();
var curDate = null;
do {curDate = new Date();}
while(curDate-date < millis);
}
</script>
</head>
<body>
<a href="http://www.google.com" onclick="logEvent(); return true;">Site 1</a>
<a href="http://www.yahoo.com" onclick="logEvent(); return true;">Site 2</a>
</body>
</html>
================================================== =======
代码适用于chrome,firefox,ie和Opera . 仅适用于Safari .....任何线索....
1 回答
我对所有WebKit浏览器都有同样的问题 . 在所有其他人中,您只需要执行新的Image() . src = "url",即使导航到新页面,浏览器也会发送请求 . WebKit将在您刚刚导航到新页面之前停止请求 . 尝试了几个将图像注入文档的黑客,甚至通过img.clientHeight force a re-paint . 我真的不想使用event.preventDefault,因为当链接有target = "_blank",表单提交等时会引起很多麻烦 . 使用同步XmlHttpRequest为支持Cross Origin Resource Sharing的浏览器结束,因为它会将请求发送到服务器,即使你没有阅读响应 . 同步请求具有在等待响应时锁定UI线程的不幸副作用,因此如果服务器很慢,页面/浏览器将锁定直到它收到响应 .