2009-07-31 8 views
15

क्या किसी को पता है कि Google Analytics को दो अलग-अलग स्क्रिप्ट टैग की आवश्यकता क्यों है?Google Analytics के लिए दो अलग-अलग स्क्रिप्ट टैग?

विशेष रूप से, उनके निर्देश पर नज़र रखने के प्रयोजनों के लिए एक वेब पेज में निम्नलिखित स्निपेट एम्बेड करने के लिए उपयोगकर्ताओं की सलाह दें:

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

उत्तर

18

<script> टैग अनुक्रम में निष्पादित किए गए हैं। एक <script> ब्लॉक निष्पादित नहीं कर सकता है अगर पिछले एक निष्पादित नहीं किया गया है।

पहला <script> टैग Google <script> टैग बनाने का प्रभारी है जो बाहरी जेएस लोड करेगा।बाद पहली <script> को क्रियान्वित करने समाप्त हो गया है, डोम ऐसा दिखाई देता है:

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

ये गारंटी है कि दूसरी <script> टैग तक .js लोड हो रहा है किया जाता है पर अमल नहीं होंगे। यदि पहला और दूसरा <script> संयुक्त किया जाएगा, तो यह _gat वैरिएबल को अपरिभाषित करने का कारण बनता है (चूंकि Google इंजेक्शन स्क्रिप्ट लोडिंग शुरू नहीं हो जाएगी जब तक कि पहली स्क्रिप्ट निष्पादित नहीं हो जाती)।

0

मुझे संदेह है कि यह स्क्रिप्ट टैग को तैनात करने के लिए document.write के उपयोग से अस्पष्ट ब्राउज़र समस्याओं से बचने का प्रयास है।

+5

मुझे संदेह है कि यह अस्पष्ट है; मेरा मानना ​​है कि वर्तमान स्क्रिप्ट ब्लॉक खत्म होने के बाद ब्राउज़र केवल लिखित स्क्रिप्ट टैग का विश्लेषण करेंगे ... अनुमानित एकल-थ्रेडेड जावास्क्रिप्ट निष्पादन के साथ कुछ करना ... – Stobor

+1

@Stobor: आपको इसे एक उत्तर के रूप में लिखना चाहिए। मैं इसके लिए वोट दूंगा। :) – chaos

0

इसके लायक होने के लिए, हम सीधे फ़ाइल डाउनलोड ट्रैक करने के लिए ऑनक्लिक = "पेजट्रैकर._trackPageview (% filename%)" तंत्र का पर्याप्त उपयोग करते हैं, लेकिन फिर भी पृष्ठ पूरी तरह से वास्तविक पृष्ठदृश्य को ट्रैक नहीं करना चाहते हैं लदा हुआ। हमें इसे सक्षम करने के लिए पृष्ठ के शीर्ष पर पहला टैग शामिल करना होगा, लेकिन अंत में अंतिम _trackPageview() कॉल को छोड़ दें (ठीक है, हम var varTracker बिट के साथ भी बहुत कुछ)।

आवश्यक नहीं क्यों वे इसे इस तरह से तोड़ते हैं, लेकिन यह हमारे उद्देश्यों के लिए थोड़ा आसान बनाता है।

+0

आप नीचे दिए गए सभी कोड डाल सकते हैं, और बाद में कोड में हैंडल हैंडलर सेट कर सकते हैं। – Draemon

1

पहला ब्लॉक वास्तव में उस स्क्रिप्ट टैग को प्रतिस्थापित करने के लिए एक संपूर्ण नई स्क्रिप्ट टैग इनलाइन लिखने के लिए जावास्क्रिप्ट का उपयोग कर रहा है। यह देखने के लिए एक जांच कर रहा है कि क्या आप अनुरोध किए जा रहे पृष्ठ पर "https" का उपयोग कर रहे हैं और यदि ऐसा है, तो स्क्रिप्ट का अनुरोध करने के लिए अपने सुरक्षित यूआरएल का उपयोग करने के लिए, या आपका ब्राउज़र "इस पृष्ठ के भाग असुरक्षित हैं - सुरक्षित प्रदर्शन आइटम? " या कॉल को बिल्कुल अस्वीकार कर दें।

यदि दूसरा स्क्रिप्ट टैग पहले में शामिल किया गया था, तो इसे उड़ा दिया जाएगा और/या एक अच्छी तरह से गठित स्क्रिप्ट टैग नहीं होगा और आपके कोड को उनके साथ अंतःक्रिया करना होगा।

इस तरह, आप अपने स्वयं के ब्लॉक में ट्रैकपेज व्यू और गुणों आदि सेट करने के लिए बस अपनी सभी कॉल कर सकते हैं और अभी भी http और https पर ठीक से काम कर सकते हैं।

तो, जब पेज renders, डोम इस तरह पहले स्क्रिप्ट के बाद दिखेगा कार्यान्वित (सामान्य 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

5

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 फ़ाइल तक परिभाषित नहीं किया जाएगा भर गया।

क्या यह समझ में आता है?