我有一个问题,当我使用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?
答案 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();
}