اثنين من علامات البرنامج النصي منفصلة في خدمة Google Analytics؟

StackOverflow https://stackoverflow.com/questions/1210034

  •  06-07-2019
  •  | 
  •  

سؤال

لا أحد يعرف لماذا يتطلب جوجل تحليلات اثنين من علامات البرنامج النصي منفصلة؟

وعلى وجه التحديد، تعليماتهم تقديم المشورة للمستخدمين تضمين المقتطف التالي من التعليمات البرمجية في صفحة على شبكة الإنترنت لأغراض التتبع:

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

لماذا لا يمكن للمستخدمين استخدام كتلة برنامج نصي واحد فقط من هذا القبيل:

<!-- 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> في التسلسل. كتلة <script> لا يمكن تنفيذ إذا لم يتم سابقتها المنفذة.

وأول بطاقة <script> هو المسؤول عن خلق <script> العلامة جوجل الذي سيتم تحميل شبيبة الخارجية. بعد الانتهاء من <script> أولا تنفيذ، وDOM يشبه ما يلي:

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

وهذا يضمن أن العلامة <script> الثانية سوف يتم تنفيذ حتى يتم تحميل .js. إذا كان سيتم الجمع بين <script> الأولى والثانية، وهذا من شأنه أن يسبب المتغير _gat أن يكون غير معرفة (منذ حقن غوغل سوف النصي لا يبدأ التحميل حتى يتم النصي الأول تنفيذ).

نصائح أخرى

وdocument.write يحدث بأسرع ما يتم تنفيذه في التعليمات البرمجية. حتى إذا كنا بك "كتلة برنامج نصي واحد" سبيل المثال، فإن شفرة المصدر ولدت الفعلي في نهاية المطاف تبدو وكأنها هذا:

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

وبالتالي سوف تفشل رمز var pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview(); للن يعرف _gat حتى يتم تحميل ملف شفرة ga.js.

هل هذا معقول؟

وكتلة الأول هو في الواقع يستخدم جافا سكريبت لكتابة جديدة كاملة العلامة النصي مضمنة لتحل محل تلك العلامة النصي. وهي تفعل فحص لمعرفة ما إذا كنت تستخدم "HTTPS" على الصفحة المطلوبة وإذا كان الأمر كذلك، لاستخدام رابط من آمن لطلب السيناريو، أو قد يعرض المتصفح على "أجزاء من هذه الصفحة هي غير مأمون - عرض أمنا العناصر؟" أو رفض إجراء المكالمة على الإطلاق.

إذا تم تضمين العلامة النصي الثاني في الأول، سيكون في مهب و / أو لا يكون بشكل جيد العلامة السيناريو والتعليمات البرمجية الخاصة بك يجب أن امتزاج مع لهم.

وبهذه الطريقة، يمكنك فقط القيام بكل المكالمات إلى وظيفة 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/ واجهات برمجة التطبيقات / تحليلات / مستندات / تتبع / gaTrackingOverview.html

وأظن انها محاولة لتجنب المشاكل متصفح غامضة مع استخدام document.write لنشر علامة النصي.

لما يستحق، ونحن جعل استخدام كبيرا من عند _ النقر = "pageTracker._trackPageview (٪ اسم٪)" آلية لمتابعة تحميل الملفات مباشرة، ولكن لا يزال لا تريد أن تتبع مشاهدة صفحة الفعلية، حتى يتم تحميل الصفحة بالكامل . علينا أن تتضمن علامة 1ST في أعلى الصفحة لتمكين ذلك، ولكن ترك الدعوة _trackPageview النهائي () في نهاية (حسنا، نحن كثيرا مع بت فار أن pageTracker جدا).

وليس بالضرورة <م> لماذا ينكسرون الامر بهذه الطريقة، لكنه يجعل من أسهل قليلا لأغراضنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top