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
orbeforeunload
handler
という記載の通り、unloadイベントを使用する方法が一番簡単で良い方法です。具体的にはonUnloadで空の(何の処理も書かれていない)関数を実行しておきます。記述を書く場所は</head>の直前でも</body>の直前でも外部JSファイルでもどこでも大丈夫だと思いますが、GAのトラッキングコード付近に書いておくのがスマートな気がします。
[javascript title=”参考ソース” highlight=”13″]
<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>
[/javascript]
こんな形です。
これはGoogleアナリティクスで解析を行う場合、必ず対応しておいた方がよさそうです。
本当ですね。これは盲点だった。
唐突で失礼いたします。
FireFoxの仕様かと思います。
https://developer.mozilla.org/En/Using_Firefox_1.5_caching
にあるような事をすると、キャッシュされなくなってすぐ戻っても毎回JavaScriptが実行されるかと思います。(例 window.onunload = function(){}; のようにしておくetc.)
>衣袋さま
GAフォーラムでご紹介いただき、ありがとうございます。
まさかこのブログがGAフォーラムで紹介されるとは思っていなかったので驚きました。
>マロマゴさま
情報ありがとうございます。間違いなくFireFoxの仕様ですね。
unloadイベントを使う方法を試してみたところ、見事に解決しました。
これはGoogleアナリティクスで解析を行う場合、標準で対応しておく必要がありますね。
できればga.js内に記述しておいてもらえるとありがたいですが・・・。
(Googleさん、どうかよろしくお願いいたします。)
ブログ記事にも対応方法を追記させていただきます。
ありがとうございました。
[…] […]