7

मैं Google Analytics में फ़ॉर्म क्रियाओं को ट्रैक करने के लिए एक काफी परिष्कृत सीआरएम के लिए एक ट्रैकिंग स्क्रिप्ट पर काम कर रहा हूं। मैं के साथ फॉर्म क्रियाओं को सटीक रूप से ट्रैक करने की इच्छा को संतुलित करने की कोशिश कर रहा हूं, की आवश्यकता नहीं है ताकि किसी फ़ॉर्म को काम न करने से रोका जा सके।e.preventDefault(); कितना खतरनाक है, और इसे कीडाउन/मूसडाउन ट्रैकिंग द्वारा प्रतिस्थापित किया जा सकता है?

अब, मुझे पता है कि ऐसा कुछ करने से काम नहीं होता है।

$('form').submit(function(){ 
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]); 
}); 

डीओएम अनलोड करता है इससे पहले प्रक्रिया करने का मौका होता है।

तो, नमूना कोड का एक बहुत कुछ इस तरह की सिफारिश की:

$('form').submit(function(e){ 
e.preventDefault(); 
var form = this; 
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]); 
//...do some other tracking stuff... 
setTimeout(function(){ 
form.submit(); 
}, 400); 
}); 

यह most cases में विश्वसनीय है, लेकिन यह मुझे परेशान करता है। क्या होगा यदि e.preventDefault(); के बीच कुछ होता है और जब मैं DOM आधारित सबमिट को ट्रिगर करने के लिए घूमता हूं? मैंने पूरी तरह से फॉर्म तोड़ दिया है।

मैं कुछ अन्य विश्लेषिकी कार्यान्वयन के आसपास poking किया गया है, और मैं something like this ध्यान दिया है:

$('form').mousedown(function(){ 
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]); 
}); 
$('form').keydown(function(e){ 
    if(e.which===13) //if the keydown is the enter key 
    _gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]); 
}); 

असल में, बजाय दखल फ़ॉर्म सबमिट करेंगे, यह सोचते हैं द्वारा यह preempting की है कि अगर किसी को नीचे माउस ले जाने या कुंजीयन है उस फॉर्म की तुलना में एंटर पर नीचे जमा किया गया है। जाहिर है, इसके परिणामस्वरूप झूठी सकारात्मक मात्रा में निश्चित रूप से परिणाम होगा, लेकिन यह e.preventDefault(); के उपयोग को पूरी तरह समाप्त कर देता है, जो मेरे दिमाग में जोखिम को समाप्त करता है जिसे मैं कभी भी फ़ॉर्म को सफलतापूर्वक जमा करने से रोक सकता हूं।

तो, मेरे सवाल:

  • यह मानक रूप से ट्रैकिंग स्निपेट लेते हैं और इसे से कभी पूरी तरह से प्रस्तुत करने से प्रपत्र रोकने को रोकने के लिए संभव है?
  • mousedown/keydown वैकल्पिक व्यवहार्य है?
  • क्या कोई सबमिशन केस हैं जो इसे याद कर सकते हैं? विशेष रूप से, क्या माउस और कीबोर्ड के अलावा सबमिट करने के अन्य तरीके हैं? और ब्राउज़र को हमेशा पृष्ठ को अनलोड करने से पहले जावास्क्रिप्ट को संसाधित करने का समय होगा?

उत्तर

30

उन पर गिरने वाले लोग वहां पर Googleplex बहुत उज्ज्वल हैं और उन्होंने कुछ दिन ऐसा महसूस किया 'जैसे यह होने वाला था और अब, पर्याप्त है, यह है। तुम क्यों यह एक अच्छी कोशिश देना नहीं है:

$('form').submit(function(e){ 
    e.preventDefault(); 
    var form = this; 
    _gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]); 
    //...do some other tracking stuff... 
    _gaq.push(function(){ 
    form.submit(); 
    }); 
    }); 

_gaq.push thigamajigger उसके तत्वों क्रमिक रूप से निष्पादित करता है, तो आप हंसी ठीक हो चाहिए।

और नहीं, मुझे नहीं पता कि मैंने अचानक इस तरह बात क्यों शुरू कर दी।

+4

एमएमएम, मुझे दोबारा प्रयास करने दो। केवल मनमाने ढंग से प्रतीक्षा करने का समय और यह मानते हुए कि यह पृष्ठ छोड़ने के लिए सुरक्षित है * गारंटीकृत * या तो (ए) उपयोगकर्ताओं के समय को बर्बाद कर दें या (बी) जल्दी से छोड़कर असफल हो जाएं (बाधाओं को आप सही ढंग से अनुमान लगाएंगे हर बार उपेक्षा किया जा सकता है)। इसके बजाय आपको एक तकनीक की आवश्यकता है जिससे ट्रैकिंग पूर्ण होने पर आपको अधिसूचित किया जा सके। सौभाग्य से, Google Analytics कतार प्रदान करता है कि: आपको बस कतार के अंत में फ़ंक्शन ऑब्जेक्ट को धक्का देना है। एक बार कतार में इसके आगे की सब कुछ पूरी हो जाने के बाद, वह कार्य निष्पादित हो जाएगा और आपका फॉर्म जमा कर दिया जाएगा। – Malvolio

+7

अब मुझे एहसास है कि आप "कुछ ट्रैकिंग सामग्री" असफल होने के बारे में भी चिंतित हो सकते हैं और इस प्रकार फॉर्म को कभी सबमिट नहीं किया जा सकता है। इसके लिए आपके दो विकल्प हैं, सभी कोड लपेटें लेकिन एक कोशिश-को छोड़कर ब्लॉक में सबमिट करें, जो मैला द्वारा सुरक्षित है, या सरल फंक्शन की अंतिम पंक्ति तक रोकथाम को कॉल न करें, इसलिए यदि कोई त्रुटि है, तो यह जीता कॉल नहीं किया जाएगा और सबमिशन * अभी भी जाना चाहिए, जो सुरुचिपूर्ण है लेकिन ध्यान से परीक्षण किया जाना चाहिए। – Malvolio

+0

'_gaq.push ((फ़ंक्शन() {' होना चाहिए '_gaq.push (function() {' – Thomas

0

एक और दृष्टिकोण:

var pageTracker; 
_gaq.push(function() { 
    pageTracker = _gat._getTrackerByName(); 
}); 

$('form').submit(function(e){ 
    pageTracker._trackEvent('Form', 'Submit', $(this).attr('action')); 
}; 

मुझे लगता है कि होगा इस तरह से _trackEvent तुल्यकालिक होगा लेकिन मैं यह परीक्षण नहीं किया।

+0

जीए असीमित होने की समस्या नहीं है। एसिंक्रोनस पहलू प्रारंभिक रूप से स्क्रिप्ट के लोडिंग को संदर्भित करता है, न कि बाद की कॉलों के लिए। एक बार ga.js लोड हो जाता है, '_gaq.push (' _ trackEvent ', ...)' कॉल को तुरंत 'PageTracker._trackEvent (...) ' – Yahel

+0

निष्पादित करता है यदि ऐसा है तो आप अपना खुद का ट्रैक लिखने पर विचार कर सकते हैं __utm.gif छवि से जुड़ा एक अधिभार हैंडलर के साथ, हालांकि मुझे लगता है कि छवियों के लिए ऑनलोड हैंडलर कुछ ब्राउज़र में विश्वसनीय नहीं हैं (उदाहरण के लिएजब कैश से लोड नहीं किया जाता है, लेकिन कैश लोडिंग से इस मामले में कभी भी नहीं होना चाहिए)। एक पुराना पेजट्रैक फ़ंक्शन: http://code.google.com/p/google-analytics-js/source/browse/trunk/gajs.js?r=3 – Thomas

3

मैं एक अलग दृष्टिकोण का उपयोग करता हूं, और सबमिट से उत्पन्न पृष्ठ में ईवेंट ट्रैकिंग स्क्रिप्ट उत्पन्न करता हूं। आप इसे स्थगित ईवेंट ट्रैकिंग पर कॉल कर सकते हैं।

मैंने बैकएंड कार्यों में ईवेंट ट्रैकिंग के लिए मेरे दृष्टिकोण के बारे में सभी विवरणों के साथ blog post लिखा था। यह जावा-स्ट्रूट की ओर पक्षपातपूर्ण है, लेकिन आप सामान्य विचार प्राप्त कर सकते हैं।

तर्क यह है कि सर्वर सर्वर पर होने के बाद मैं कुछ चीजों को ट्रैक करना चाहता हूं। इस तरह के मामले में, फॉर्म जमा करने और सर्वर द्वारा संसाधित करने के बाद।

क्या मैं (बहुत संक्षेप) है: एक वस्तु सत्र (एक सूची/कतार)

  • अगले पृष्ठ पर फ्लश इन घटनाओं रेंडर करने के लिए बंधे में

    • स्टोर घटनाओं (जावास्क्रिप्ट और खाली उत्पन्न कतार)
  • 0

    क्या कोई कारण है कि आप केवल उस पोस्ट के आधार पर सर्वर पक्ष से Google Analytics को कॉल जारी नहीं कर सकते हैं?

    मुझे नहीं पता कि आपका सिस्टम किस प्रकार बनाया गया है, लेकिन उदाहरण के लिए, यह PHP प्रोजेक्ट जीए को कॉल जारी करेगा, इस प्रकार डीओएम अनलोडिंग की समस्या को हटा देगा, फॉर्म को तोड़ने की जरूरत है, और इसी तरह।

    http://code.google.com/p/serversidegoogleanalytics/

    मुझे लगता है कि आप एक कुकी पर कब्जा करने की आवश्यकता हो सकती है - इससे पहले कि आप यह प्रस्तुत की है के रूप में एक छिपा क्षेत्र में मूल्य में लिख सकते हैं?

    +0

    कुछ लोगों के लिए काम कर सकता है, लेकिन दुर्भाग्यवश, इस सीएमएस पर्यावरण में, मेरे पास सर्वर साइड स्क्रिप्टिंग तक पहुंच नहीं है। जावास्क्रिप्ट में सबकुछ किया जाना चाहिए। – Yahel

    +0

    और यदि आप कर सकते हैं, * आप * सर्वर के लिए भुगतान कर रहे हैं; आपका लाखों ग्राहक प्रत्येक अपने ग्राहक को लाते हैं। – Malvolio

    +0

    वंशावली के लिए: इस उत्तर में जुड़ी परियोजना सेवानिवृत्त हो गया है, इसके बजाय नई परियोजना http://code.google.com/p/php-ga/ – Funka

    1

    e.preventDefault() फ़ंक्शन कॉल की शुरुआत में सही नहीं होना चाहिए। यह सत्यापित करने के लिए कि क्या सब ठीक से काम कर रहा है, और केवल e.preventDefault() पर कॉल करने के लिए केवल if कथन नहीं है। यदि श्रृंखला में कोई भी कार्य अपेक्षित परिणाम वापस नहीं करता है, तो submitted चर false पर सेट करें, और डिफ़ॉल्ट को रोकें।

    किसी भी एसिंक्रोनस (जैसे आपके setTimeout) की बात आती है, तो यह संभालने के लिए थोड़ा और मुश्किल हो सकता है, लेकिन आपके कोड की तरह दिखने के आधार पर, निश्चित रूप से सुनिश्चित करने के तरीके होंगे। तो आप जांच सकते हैं कि विधियां मौजूद हैं या नहीं if (_gaq.push) (उदाहरण के लिए)। आप प्रत्येक ब्राउजर में प्रत्येक संयोजन के परीक्षण के बिना 100% सुनिश्चित नहीं कर सकते हैं, लेकिन मुझे लगता है कि आप इसके साथ एक बहुत ही संतोषजनक परिणाम प्राप्त कर सकते हैं।

    3

    यदि आपके पास फॉर्म हमेशा काम करना चाहिए लेकिन ट्रैकिंग करना पूरी तरह से जरूरी होने पर बलिदान किया जा सकता है, आप इसे कोशिश/पकड़ सकते हैं।

    $('form').submit(function(e){ 
        try{ 
         e.preventDefault(); 
         var form = this; 
         _gaq.push('_trackEvent', 'Form', 'Submit', $(this).attr('action')); 
         //...do some other tracking stuff... 
         setTimeout(function(){ 
          form.submit(); 
         }, 400); 
        } catch (e) { 
         form.submit(); 
        } 
    }); 
    
    +0

    देखें इस समाधान को कार्यान्वित किया गया एक ही समस्या और अच्छी तरह से काम किया। धन्यवाद। Google को फॉर्म सबमिट करने और ईवेंट ट्रैकिंग के साथ कोई समस्या क्यों है? सबसे पहले मैंने सोचा कि यह फॉर्म जमा करने के कारण था एनजी और पेज को Google को डेटा भेजने के लिए बहुत तेज़ी से रीलोड करना, लेकिन सेटटाइम लॉजिक जोड़ने के बाद भी, यह अभी भी हो रहा था। केवल जब मैंने 'e.preventDefault' कॉल जोड़ा, तो सब कुछ फिर से काम करना शुरू कर दिया। –

    +1

    टाइमआउट सेट करना केवल आधा कहानी है। यदि आप फ़ॉर्म सबमिट करने के लिए टाइमआउट सेट करते हैं, लेकिन e.preventDefault नहीं करते हैं, तो आप फ़ॉर्म सबमिशन तुरंत (ईवेंट के डिफ़ॉल्ट के रूप में) होने दे रहे हैं, जो अभी भी एनालिटिक्स को कॉल करने का प्रयास करता है। – audiodude

    0

    @ माल्वोलियो के उत्तर पर विस्तार करने के लिए: एक बार गाक घटना भेजता है कतार में अगला आइटम संसाधित करेगा। इसका अर्थ यह है कि ईवेंट HTTP अनुरोध क्लाइंट पक्ष पर निरस्त हो सकता है, लेकिन GA को अनुरोध प्राप्त होगा। प्रतिक्रिया समाप्त होने तक स्क्रिप्ट निष्पादन को अवरुद्ध करने के बारे में चिंता न करें। यह एक आग है और परिदृश्य भूल जाओ।

    संबंधित मुद्दे

     संबंधित मुद्दे