2011-09-15 4 views
0
function log(name, value) 
{ 
    mylog.push({'name':name, 'value':value}); 
} 

function flush() 
{ 
    for (i = 0 ; i < mylog.length ; i++){ 
     url_str += '&n[]=' + mylog[i].name + '&v[]=' + mylog[i].value; 
    } 
    url_str += '&r='+Math.floor(Math.random() * 100000); 

    var img = new Image(); 
    var url = 'http://somedomain.com/pixel.php?' + url_str; 
    img.src = url; 
} 

if (window.attachEvent) 
    window.attachEvent('onunload', flush); 
else if (window.addEventListener) 
    window.addEventListener('unload', flush, false); 

페이지에서 핫스팟을 찾기 위해 사용자 상호 작용을 추적하는 코드를 작성 중입니다. 그것의 대부분은 이미 완료되어 대부분의 브라우저에서 작동하지만, 현재 Safari 5.0.5/Mac 10.6에서 어려움을 겪고 있습니다 (BTW, Windows XP에서는 Safari 5.0.1로 복제 할 수도 있음). 나를 괴롭히는 부분은 페이지 전송 중 링크 클릭입니다. 예를 들어, 아래 코드는 someotherpage.html 나를 취페이지가 언로드되기 전에 Safari가 기능을 종료하지 않습니까?

<form onclick="log('LINK_CLICKED', 'some other page'); this.submit();" action="someotherpage.html">Some other page</form> 

이 사이트는 모든 브라우저에서 someotherpage.html 나를 필요하지만 단지 사파리 5.0.5/맥 10.6 로그에 LINK_CLICKED을 표시하지 않습니다 . Safari inspector에서 콘솔 검사를 한 후에 Safari에 "리소스를로드하지 못했습니다"라는 오류가 있음을 발견했습니다. URL이 호출 될 수있는 동안 브라우저가 계속 이동하기로 결정했기 때문에 이것이 의심 스럽습니다 (?).

어쨌든 beforeunload 이벤트를 시도하고 setTimeout을 사용하여 페이지 언로드를 지연 시켰습니다. 나는 HTML 양식을 모두 변경하는 것을 고려하고 있지만 상당한 노력이 될 것입니다. 누군가가 내 관심을 빼앗긴 아이디어가 없다면 여전히 열려 있습니다. Safari 5.0.5 (Mac 10.6)에서 작동하는 방법에 대한 제안 사항은 무엇입니까?

답변

1

난 그냥 당신이 tacking 픽셀로드에 콜백과 완화 수있는 경쟁 조건으로 실행하는 것 같아요.

function log(name, value, callback) 
{ 
    mylog.push({'name':name, 'value':value, 'callback':callback}); 
} 


function flush() 
{ 
    for (i = 0 ; i < mylog.length ; i++){ 
     url_str += '&n[]=' + mylog[i].name + '&v[]=' + mylog[i].value; 
    } 
    url_str += '&r='+Math.floor(Math.random() * 100000); 

    var img = new Image(); 
    img.onload = logReady; 
    var url = 'http://somedomain.com/pixel.php?' + url_str; 
    img.src = url; 
} 

function logReady() 
{ 
    for (i = 0 ; i < mylog.length ; i++){ 
     mylog[i].callback(); 
    } 
} 



<form onclick="log('LINK_CLICKED', 'some other page', function() { form.submit(); });" action="someotherpage.html">Some other page</form> 
+0

감사! 귀하의 솔루션과 http://stackoverflow.com/questions/4945764/link-click-tracking-does-not-work-on-safari-browser를 섞어서 사용했습니다. 로그 함수를 통해 콜백을 보내고 CORS가 호출을 수행하도록했습니다. 상충 관계가 있었지만 어느 정도 견딜 수있었습니다. – Jerico

관련 문제