关于使用image.src进行统计的问题

时间:2012-09-01 16:41:56

标签: javascript gif usage-statistics

我有一个问题,当我使用image.src在1x1 gif上发出请求时。但是当我使用chrome和safari时,请求无法记录在我的Web服务器中。但是,当我使用javascript延迟一些迷你秒(让我们说300毫秒)时,它就适用了。有没有人知道更好的解决方案,而不是使用300毫秒延迟(因为它使我的点击变慢)?

我的javascript看起来像

/* Event Capture */
function eventCapture(et,ep,eid,eurl) {     
  var ec=new Image();
  ec.src=cp+cd+cu
  +"&et="+escape(et)
  +"&ep="+escape(ep)
  +"&ei="+escape(eid)
  +"&eu="+escape(eurl)+_do+_vo
  +"&cb="+new Date().getTime();   
}

有谁知道reqson?

2 个答案:

答案 0 :(得分:0)

你是如何设定延迟的?如果你只是打电话

setTimeout("javascript function",milliseconds);

关于事件捕获并将延迟放在那里,它不应该阻止页面的其余部分,并且能够一次处理多次点击,因为每次调用都会调用一个独立于其余部分的新setTimeout。 / p>

就您的代码而言,我假设变量cp, cd, and cu是在全球其他地方定义的?如果在首次调用脚本时未定义某些内容,Chrome会在您创建图像的ReferenceError字符串时抛出src,这可能会导致所有内容丢失。

答案 1 :(得分:0)

一种可能性是图像立即被垃圾收集,因为没有对图像变量ec的持久引用。但是,当你执行setTimeout()时,它会创建一个闭包,使变量持续足够长。

您可以测试此解决方案,该解决方案仅在图像实际加载之前创建临时闭包,以查看它是否解决了问题:

/* Event Capture */
function eventCapture(et,ep,eid,eurl) {     
  var ec=new Image();
  ec.onload = function() {
      ec = null;
  }

  ec.src=cp+cd+cu
  +"&et="+escape(et)
  +"&ep="+escape(ep)
  +"&ei="+escape(eid)
  +"&eu="+escape(eurl)+_do+_vo
  +"&cb="+new Date().getTime();   
}