0

当我使用 image.src 在 1x1 gif 上发出请求时,我遇到了一个问题。但是当我使用 chrome 和 safari 时,请求无法登录到我的网络服务器。但是,当我使用 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?

4

2 回答 2

0

一种可能性是图像立即被垃圾收集,因为没有对图像变量的持久引用ec。但是,当您执行 a 时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();   
}
于 2012-09-01T18:01:19.127 回答
0

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

setTimeout("javascript function",milliseconds);

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

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

于 2012-09-01T16:54:28.437 回答