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)でどのように動作するかについてのご意見はありますか?
ありがとうございました!私はあなたのソリューションとhttp://stackoverflow.com/questions/4945764/link-click-tracking-does-not-work-on-safari-browserの組み合わせを使用しました。ログ機能を介してコールバックを送信し、CORSにコールを依頼しました。トレードオフがありましたが、多かれ少なかれ許容できます。 – Jerico