15

コンテンツ スクリプトを使用して特定のページを変更する Google Chrome 拡張機能に取り組んでいます。これらの変更がいつ、どこで適用されるかを理解するために、Google アナリティクスを調べていました。これは、Google アナリティクスを他のウェブ プロパティで既に使用しているためです。

マニフェスト ファイルを介して ga.js ライブラリを含め、ページに変更を適用すると、同期ページ呼び出しで _trackPageview をトリガーします。

var pageTracker = _gat._getTracker("UA-our-UA");    
pageTracker._setDomainName("none");
pageTracker._setAllowLinker(true);    
pageTracker._trackPageview(window.location.href);

ここでの問題は、異なるドメインの各 pageView が新しい訪問と訪問者としてカウントされることです。それを回避する方法はありますか?たとえば、クロム拡張 sqlite データベースまたはブラウザのキー値ストアを使用して、一意のユーザー ID を保存し、ドメインに依存しない ID を訪問します。これは可能ですか?

ありがとう

4

2 に答える 2

27

そのコードを他の人のサイト内で実行しないでください。Google アナリティクスの構成はやや機密性が高く、サイトにカスタム実装がある場合、その訪問者に対してそれを壊している可能性があります.

独自のバックグラウンド ページに Google アナリティクスを含める必要があります。そして、イベントを追跡する必要があるたびに、content_script からバックグラウンド ページに通信します。

バックグラウンド スクリプトに GA スクリプトを含めると、Web サイト上の他のコードに干渉せず、常に同じドメインから実行されるため、同じ Cookie を使用して重複した訪問/訪問者を発生させないため、便利です。

バックグラウンド ページに GA をインストールする方法の詳細は次のとおりです。

https://developer.chrome.com/docs/extensions/mv2/tut_analytics/

また、コンテンツ スクリプトからバックグラウンド ページに情報を渡すためのドキュメントは次のとおりです。

http://code.google.com/chrome/extensions/messaging.html

于 2012-07-07T07:06:28.583 に答える
15

エドゥアルドが彼の答えで言ったように、バックグラウンドページが必要なので、次のように行うことができます:

manifest.jsonファイルで:

,
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'"
,

イベントを追跡したいときはいつでもcontent_scripts.jsで、バックグラウンドページにメッセージを送信してそのイベントをトリガーします。

chrome.runtime.sendMessage({action: "yourEvent"});

background.js

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

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXXXX-X']);

    // here we receive the coming message from the content script page
    chrome.runtime.onMessage.addListener(function( request, sender, sendResponse ) {
        if(request.action == "yourEvent"){
            _gaq.push(['_trackEvent', "eventCategory", 'eventType']);
        }
    });
于 2015-07-27T13:12:37.513 に答える