7

すべてが 1 つのページに存在する html5 モバイル アプリがあり、history.back/popstate/etc を使用してページのコンテンツを変更します (jQuery Mobile 経由)。Google アナリティクスを使用してさまざまなイベントを追跡しています。あるページでは、ユーザーが特定のボタンを介して終了したかどうかを追跡しています。

$('#my-back-button').bind('tap', function() {
    _gaq.push(['_trackEvent', 'mycategory', 'myaction']);
    history.back();
    return false;
});

Android 2.2 ブラウザーでは history.back() が呼び出されますが、onpopstate は起動されず、ページは変更されません。window.onpopstate = function() { alert("!"); };history.back() の直前に置くと、アラートは表示されません。

2 行を逆にすると (最初に history.back()、次に _gaq.push)、機能しているように見えますが、コード全体でこの種の順序付けに依存することはできません。

例外はスローされていません。iOS およびデスクトップ Chrome で問題なく動作します。

Google アナリティクスの呼び出し後に history.back() が機能しない理由はありますか?

4

3 に答える 3

2

_ への呼び出しをgaq.push()0 の非同期タイムアウトでラップしてみてください。

$('#my-back-button').bind('tap', function() {
    setTimeout(function() {
         _gaq.push(['_trackEvent', 'mycategory', 'myaction']);
    }, 0);
    history.back();
    return false;
});

これによりhistory.back()、Google アナリティクスが履歴スタックに影響を与える可能性がある前に、最初に実行できます。

于 2012-07-24T00:08:12.177 に答える
1

うーん、本当に厄介なものです。_gaq.push()を新しい関数にラップし、history.go()をそのままにしておくとどうなりますか?

于 2012-07-23T20:37:42.360 に答える
1

おそらく、Google アナリティクスへの呼び出しによって履歴スタックに新しいエントリが追加され、history.back() によって現在のページに移動するだけです。

または、GA は歴史に新しい範囲を与えます。

history.back() を 2 回呼び出すか、top.history.back() または window.history.back() または self.history.back() を使用してみてください

于 2012-07-23T21:53:22.743 に答える