15

Google Analyticsが2つの別々のスクリプトタグを必要とする理由を誰かが知っていますか?

具体的には、彼らの指示は、追跡目的で次のコードスニペットをWebページに埋め込むようにユーザーにアドバイスしています。

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

ユーザーが次のようなスクリプトブロックを1つだけ使用できなかったのはなぜですか。

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
4

5 に答える 5

18

<script>タグは順番に実行されます。前の<script>ブロックの実行が完了していない場合、ブロックは実行できません。

最初のタグは、外部jsをロードする<script>Googleタグの作成を担当します。<script>最初の<script>実行が終了すると、DOMは次のようになります。

<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->

これにより、読み込みが完了<script>するまで2番目のタグが実行されないことが保証されます。.js1番目と2番目<script>を組み合わせると、_gat変数が未定義になります(最初のスクリプトの実行が完了するまで、Googleが挿入したスクリプトの読み込みが開始されないため)。

于 2009-07-31T00:39:54.333 に答える
5

document.writeコードで実行されるとすぐに発生します。したがって、「1つのスクリプトブロック」の例を使用した場合、実際に生成されるソースコードは次のようになります。

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

したがって、ga.jsファイルがロードされるまで定義されないvar pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview();ため、コードは失敗します。_gat

それは理にかなっていますか?

于 2009-07-31T00:23:32.783 に答える
1

最初のブロックは、実際にはJavaScriptを使用して、まったく新しいスクリプトタグをインラインで記述し、そのスクリプトタグを置き換えています。要求されているページで「https」を使用しているかどうかを確認し、使用している場合は、安全なURLを使用してスクリプトを要求します。そうしないと、ブラウザに「このページの一部は安全ではありません。安全に表示してください」と表示される場合があります。アイテム?」または、電話をかけることをまったく拒否します。

2番目のスクリプトタグが最初のタグに含まれている場合、それは吹き飛ばされたり、整形式のスクリプトタグではなかったりするため、コードをそれらのタグと混合する必要があります。

このようにして、trackPageViewへのすべての呼び出しを実行し、独自のブロックにプロパティなどを設定するだけで、httpおよびhttps上で適切に機能します。

したがって、ページがレンダリングされると、最初のスクリプトが実行された後、DOMは次のようになります(通常のhttp)。

<!-- Google Analytics -->
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

そしてこれ(https):

<!-- Google Analytics -->
<script src='https://ssl.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

詳細:http ://code.google.com/apis/analytics/docs/tracking/gaTrackingOverview.html

于 2009-07-31T00:22:52.300 に答える
0

document.writeスクリプトタグを展開するためにを使用することで、ブラウザのあいまいな問題を回避する試みだと思います。

于 2009-07-31T00:08:22.163 に答える
0

その価値については、onclick = "pageTracker._trackPageview(%filename%)"メカニズムを十分に活用してファイルの直接ダウンロードを追跡しますが、ページが完全に読み込まれるまで実際のページビューを追跡する必要はありません。これを有効にするには、ページの上部に最初のタグを含める必要がありますが、最後の_trackPageview()呼び出しは最後に残します(var pageTrackerビットも同様です)。

必ずしもそのように分割するわけではありませんが、私たちの目的にとっては少し簡単になります。

于 2009-07-31T00:21:55.137 に答える