2015-02-16 8 views
6

का उपयोग करते समय भी "twttr परिभाषित नहीं किया गया है" फ़ायरबग कंसोल एक त्रुटि फेंकता है। यह बताता है कि जिस कोड को मैं सामाजिक घटनाओं को ट्रैक करने के लिए उपयोग करने का प्रयास कर रहा हूं उसका उपयोग //platform.twitter.com/widgets.js को असीमित रूप से लोड करना समाप्त हो गया है।संदर्भ त्रुटि: twttr.ready()

ReferenceError: twttr is not defined twttr.ready(function (twttr) {

हालांकि, मैं ट्विटर प्रलेखन (https://dev.twitter.com/web/javascript/events) पीछा किया, और, twttr.ready() के चारों ओर लपेटा उसी तरह एक फेसबुक घटनाओं के साथ करता है।

<script type="text/javascript"> //load social sharing buttons async 
    (function(w, d, s) { 
     function go(){ 
     var js, fjs = d.getElementsByTagName(s)[0], load = function(url, id) { 
      if (d.getElementById(id)) {return;} 
      js = d.createElement(s); js.src = url; js.id = id; 
      fjs.parentNode.insertBefore(js, fjs); 
     }; 
     load('//connect.facebook.net/en_US/all.js#appId=1111111111111111&xfbml=1', 'fbjssdk'); 
     load('https://apis.google.com/js/plusone.js', 'gplus1js'); 
     load('//platform.twitter.com/widgets.js', 'tweetjs'); 
     } 
     if (w.addEventListener) { w.addEventListener("load", go, false); } 
     else if (w.attachEvent) { w.attachEvent("onload",go); } 
    }(window, document, 'script')); 
</script> 

<script type="text/javascript"> 
     window.fbAsyncInit = function() { 
       FB.Event.subscribe('edge.create', function(targetUrl) { 
       ga('send', 'social', 'facebook', 'like', targetUrl); 
      }); 
       FB.Event.subscribe('edge.remove', function(targetUrl) { 
       ga('send', 'social', 'facebook', 'unlike', targetUrl); 
      }); 
     } 
     twttr.ready(function (twttr) { 
     twttr.events.bind('tweet', function(e){ 
      if(!e) return; 
      ga('send', 'social', 'twitter', 'tweet', theURL); 
     }) 
     }); 
    </script> 

कोई संकेत?

उत्तर

7

ऐसा प्रतीत होता है कि twttr अभी तक प्रारंभ नहीं हुआ है। सुनिश्चित करें कि स्क्रिप्ट (//platform.twitter.com/widgets.js) आपके पास मौजूद कोड के ब्लॉक से पहले लोड हो रही है।

यही कारण है कि आप अपरिभाषित (twttr) प्राप्त कर रहे हैं।

अपने संपादन देखने के बाद, यह स्पष्ट हो रहा है कि क्या हो रहा है। पेज लोड होने के बाद आपकी स्क्रिप्ट सिर जोड़ रही हैं और स्क्रिप्ट लोड कर रही हैं। कोड निष्पादित करने के ठीक बाद जो आपके द्वारा सिर में इंजेक्शन वाली चीजों पर निर्भर करता है और अभी भी लोड हो रहा है, यही कारण है कि twttr अभी तक प्रारंभ नहीं हुआ है।

window.addEventListener("load", function() { 
    window.fbAsyncInit = function() { 
     FB.Event.subscribe('edge.create', function(targetUrl) { 
      ga('send', 'social', 'facebook', 'like', targetUrl); 
     }); 
     FB.Event.subscribe('edge.remove', function(targetUrl) { 
      ga('send', 'social', 'facebook', 'unlike', targetUrl); 
     }); 
    } 

    document.getElementById('tweetjs').addEventListener('load', function() { 
     twttr.ready(function (twttr) { 
      twttr.events.bind('tweet', function(e){ 
       if(!e) return; 
       ga('send', 'social', 'twitter', 'tweet', theURL); 
      }) 
     }); 
    }, false); 
}, false); 

आप क्रॉस ब्राउज़र समर्थन चाहते हैं, आप क्या वे अपने समारोह में किया था पहला window.addEventListener के लिए जाँच करने के लिए पालन करना चाहें, और फिर विंडो पर वापस आते हैं:

नीचे इस कोड को ब्लॉक की कोशिश करो। पुराने ब्राउज़र के लिए attachEvent।

+0

इसलिए एक twttr.ready का उपयोग करता है() – flapane

+2

twttr वस्तु के लिए एक तैयार समारोह के लिए में प्रारंभ किया जाना चाहिए। –

+0

widjets.js कोड के उस ब्लॉक से ठीक पहले रखा गया है। मैं क्या खो रहा हूँ? धन्यवाद – flapane

4

के उन समस्याओं का सामना कर के लिए 'twttr अपरिभाषित है', निम्नलिखित मेरे लिए इसे हल ...

शरीर उद्घाटन के बाद इस स्क्रिप्ट को शामिल करें और आप अपने बटन एम्बेड से widget.js लिपियों अवश्य निकाल दें अगर कॉपी किया गया & चिपकाया गया।

window.twttr = (function(d, s, id) { 
 
var js, fjs = d.getElementsByTagName(s)[0], 
 
t = window.twttr || {}; 
 
if (d.getElementById(id)) return t; 
 
js = d.createElement(s); 
 
js.id = id; 
 
js.src = "https://platform.twitter.com/widgets.js"; 
 
fjs.parentNode.insertBefore(js, fjs); 
 

 
t._e = []; 
 
t.ready = function(f) { 
 
t._e.push(f); 
 
}; 
 

 
return t; 
 
}(document, "script", "twitter-wjs"));

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