【GA】Firefoxでブラウザバックした時にGoogleアナリティクスのGIFリクエストが飛ばない

GoogleアナリティクスはGIFリクエストごとにユニークなIDを振って、ブラウザバックしたときにもGIFリクエストを飛ばすというのは多くの方がご存知かと思いますが、どうもFiddlerでGIFリクエストを追っていると、FirefoxだけブラウザバックしてもGIFリクエストが飛ばないときがあるんですよ。

InternetExplorerやChromeはブラウザバックで必ずGIFリクエストが飛びますが、Firefoxはかなり高い確率で飛ばないです。

GIFリクエストが飛ぶ・飛ばないの条件は明確ではないのですが、ページを移動してから少し時間を置いて(15秒ぐらい?)ブラウザバックすると飛ぶのですが、ページを移動してすぐに戻るとほぼ飛ばないです。

挙動的にはブラウザバックしたときにJavaScript自体が実行されていない印象です。これはFirefoxの仕様なのでしょうか。知っている方がいたら教えて欲しいです・・・。

————————————————–

4月9日追記

コメント欄にて情報をいただきました。マロマゴさま、ありがとうございました。

やはりFirefoxの仕様だったようです。

https://developer.mozilla.org/En/Using_Firefox_1.5_caching

表示速度向上のため、JavaScriptのステータスもキャッシュされると書かれていますので、既に実行済みの処理はブラウザの戻る/進むでは再度実行されないようになっているようです。

対応方法はいくつか記載されていますが、

the page uses an unload or beforeunload handler

という記載の通り、unloadイベントを使用する方法が一番簡単で良い方法です。具体的にはonUnloadで空の(何の処理も書かれていない)関数を実行しておきます。記述を書く場所は</head>の直前でも</body>の直前でも外部JSファイルでもどこでも大丈夫だと思いますが、GAのトラッキングコード付近に書いておくのがスマートな気がします。

<script type="text/javascript">

var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'あなたのWebプロパティID']);
 _gaq.push(['_trackPageview']);

(function() {
 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();

window.onunload = function(){}; // FirefoxのJavaScriptキャッシュ対策

</script>

こんな形です。
これはGoogleアナリティクスで解析を行う場合、必ず対応しておいた方がよさそうです。

ブログはじめました

いやー、始まりましたね。満を持して。

このブログでは、

  • 社会や仕事について思ったこと
  • アクセス解析やWebマーケティングのこと
  • サラリーマン川柳
  • お料理レシピ
  • 大切だと思ったこと

など、一見統一感のないことをテーマとして、TwitterやFacebookでは書けないまとまった文章を書く場にしていきたいと思います。

このテーマの統一感のなさも「それもこれも私という人間の一側面だ」ということにすれば、皆さんに許していただけるのではないかと、高をくくって臨んでいきたいと思っております。

 

どうぞよろしくお願いします。