質問

Googleアナリティクスに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>
役に立ちましたか?

解決

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

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

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

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

他のヒント

document.writeは、コードで実行されるとすぐに発生します。したがって、<!> quot; 1つのスクリプトブロック<!> quot;たとえば、実際に生成されたソースコードは次のようになります。

<!-- 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コードは失敗します。

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

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

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

この方法で、trackPageViewのすべての呼び出しを実行し、独自のブロックでプロパティなどをきれいに設定し、httpおよびhttpsで適切に動作することができます。

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

<!-- 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

document.writeを使用してスクリプトタグを展開することにより、ブラウザーの不明瞭な問題を回避しようとしていると思われます。

価値があるものについては、onclick = <!> quot; pageTracker._trackPageview(%filename%)<!> quot;を実質的に使用します。ファイルの直接ダウンロードを追跡するメカニズムですが、ページが完全にロードされるまで実際のページビューを追跡したくない場合があります。これを有効にするには、ページの上部に最初のタグを含める必要がありますが、最後に最後の_trackPageview()呼び出しを残します(まあ、var pageTrackerビットも多くあります)。

必ずしもなぜ分割する必要はありませんが、私たちの目的にとっては少し簡単になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top