Javascript 链接单击跟踪在Safari浏览器上不起作用

Javascript 链接单击跟踪在Safari浏览器上不起作用,javascript,safari,Javascript,Safari,我有一个基本的html页面,它有指向不同站点的链接。我想做的是跟踪点击。我这样做是通过发送一个0像素的图像调用点击事件的链接,而不返回假点击事件 除了Safari(在windows操作系统上)之外,其他浏览器都可以使用同样的方法 当使用javascript单击链接时,我延迟重定向并向服务器发送图像请求,并记录服务器端的单击。我已经尝试增加延迟,但没有成功。。。追踪器在所有浏览器上使用gr8,Safari除外,Safari根本不发送请求 我不知道为什么,但可能是safari在发出请求之前等待执行完

我有一个基本的html页面,它有指向不同站点的链接。我想做的是跟踪点击。我这样做是通过发送一个0像素的图像调用点击事件的链接,而不返回假点击事件

除了Safari(在windows操作系统上)之外,其他浏览器都可以使用同样的方法

当使用javascript单击链接时,我延迟重定向并向服务器发送图像请求,并记录服务器端的单击。我已经尝试增加延迟,但没有成功。。。追踪器在所有浏览器上使用gr8,Safari除外,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><br/>
    <a href="http://www.yahoo.com" onclick="logEvent(); return true;">Site 2</a><br/>
  </body>
</html>

函数logEvent(){
图像=新图像(1,1);
image.onLoad=function(){alert(“Loaded”);};
image.onLoad=function(){alert(“Error”);};
image.src='http://#path_to_logger_php#/log.php?'+Math.random(011000)+'='+Math.random(011000);
pauseRedirect(500);
}
函数pauseRedirect(毫秒){
变量日期=新日期();
var curDate=null;
do{curDate=new Date();}
while(curDate日期<毫秒);
}


=========================================================

<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><br/>
    <a href="http://www.yahoo.com" onclick="logEvent(); return true;">Site 2</a><br/>
  </body>
</html>

代码可以在chrome、firefox、ie和Opera中使用。仅对Safari不起作用。。。。。任何线索……

我对所有WebKit浏览器都有相同的问题。在所有其他情况下,您只需执行new Image().src=“url”,即使在导航到新页面时,浏览器也会发送请求。当您立即导航到新页面时,WebKit将在发送请求之前停止请求。尝试了几种将图像注入文档甚至通过img.clientHeight的黑客攻击。我真的不想使用event.preventDefault,因为当一个链接有target=“_blank”、form submit等时,这会导致很多麻烦。最后,对于支持的浏览器,它使用了一个同步XmlHttpRequest,因为即使您无法读取响应,它也会将请求发送到服务器。同步请求有一个不幸的副作用,即在等待响应时锁定UI线程,因此如果服务器速度较慢,页面/浏览器将锁定,直到收到响应为止

var supportsCrossOriginResourceSharing = (typeof XMLHttpRequest != "undefined" && "withCredentials" in new XMLHttpRequest());
function logEvent() {
    var trackUrl = 'http://#path_to_logger_php#/log.php?'+Math.random(0, 1000) + '=' + Math.random(0, 1000);
    if(supportsCrossOriginResourceSharing) {
        xhrTrack(trackUrl);
    } else {
        imgTrack(trackUrl);
    }
}

function xhrTrack(trackUrl) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", trackUrl, false);
    xhr.onreadystatechange = function() {
        if(xhr.readyState >= this.OPENED) xhr.abort();
    }
    try { xhr.send() } catch(e) {}
}

function imgTrack(trackUrl) {
    var trackImg = new Image(1,1);
    trackImg.src = trackUrl;
}

您是在等待映像完成加载还是执行类似于
setTimeout()
的操作?我们能看到一些代码吗?感谢您将用户浏览器冻结500毫秒。在JS中模拟睡眠。。。无可奉告。PS:我还认为Safari会等到JS完成后才执行请求。您应该将代码更改为异步AJAX请求,而不是图像内容(即,如果计数器位于同一服务器上)我的计数器php位于另一台服务器上,需要保存在那里。。还有其他建议吗?我在Windows操作系统上对Safari 5.0.3和Safari 4.0.5进行了测试,但这两个版本都没有跟踪到点击量。您最终做了什么来解决这个问题?遇到了一个非常类似的问题,尽管我没有冻结浏览器,因为这似乎只是一种浪费。