2011-09-15 10 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(Windows XPではSafari 5.0.1でも複製できます)に困っています。私に難しい部分は、ページ転送中のリンククリックです。例えば、以下のコードはsomeotherpage.htmlために私を取る:ログにLINK_CLICKEDは表示されませんSafariはページをアンロードする前に機能を終了させませんか?

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

サイトでは、すべてのブラウザでsomeotherpage.htmlために私がかかりますが、唯一のSafari 5.0.5/Macの10.6 。 Safariのインスペクタでコンソールチェックを行った後、Safariに「リソースをロードできませんでした」というエラーがあることがわかりました。私はこれがURLが呼び出される間、ブラウザは(?)に移動することを決めたので、これが疑わしい。

いずれにしても、beforeunloadイベントを試して、setTimeoutを使用してページのアンロードを遅延させました。私は HTMLフォーム全体を変更することを検討していますが、それはかなりの努力になるでしょう。それでも、誰かが私の注意を奪ったアイデアを持っていない限り、私はそれを公開しています。 Safari 5.0.5(Mac 10.6)でどのように動作するかについてのご意見はありますか?

答えて

1

タックするピクセルの負荷でコールバックを緩和できる競合状態に陥っていると思います。

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

関連する問題