2012-02-15 12 views
6

मुझे कुछ यूट्यूब एम्बेडिंग कोड मिला है (मैं केवल उस कोड को पेस्ट करूँगा जो मेरे लिए परेशानी पैदा कर रहा है और जो चीजें सार्वजनिक नहीं हैं):यूट्यूब प्लेयर आईफ्रेम एपीआई: प्लेविडियो फ़ायरफ़ॉक्स पर काम नहीं करता है 9.0.1

console.log(ytplayer); 
ytplayer.playVideo(); 

क्रोम और एफएफ पर Console.log मुझे सही तरीकों के साथ अच्छी वस्तुएं दिखाता है, और विधि playVideo() वहां मौजूद है। और यह सब अन्य ब्राउज़रों मैं जाँच के लिए काम करता है, लेकिन यह एफएफ पर काम नहीं करता !? क्या और भी दिलचस्प है कि जब मैं सामान्य YouTube प्ले बटन का उपयोग कर तो मैं pauseVideo() विधि (और अन्य सभी: मांग, को नियंत्रित करने मात्रा) का उपयोग कर सकते वीडियो को चलाने के है, लेकिन मैं उपयोग नहीं कर सकते playVideo() विधि ...

ytplayer = new YT.Player(player, { 
     height: height, 
     width: width, 
     videoId: videoid, 
     allowfullscreen: 'true', 
     playerVars: { 
      controls: 0, 
      showinfo: 0, 
      wmode: 'opaque', 
      autoplay: (autoplay ? 1 : 0) 
     }, 
     events: { 
      'onReady': function() { 
       console.log('I am ready'); 
      } 
     } 
    }); 
बेशक 'मैं तैयार हूँ'

सांत्वना उत्पादन में है:

मैं embedding वीडियो के नए तरीके का उपयोग करें। मैं पता नहीं है कि मैं क्या गलत करते हैं और यही कारण है केवल एफएफ काम नहीं कर रहा है ... कोई जे एस त्रुटि है, और कोई सुराग नहीं है ... आशा है किसी से पहले इस समस्या थी और यह संकल्प लिया गया है! :)

+0

'कोई जेएस त्रुटि नहीं है, और कोई संकेत नहीं है' समस्या पृष्ठ का लिंक केवल दूसरों को समस्या की पहचान करने में मदद कर सकता है, न केवल आपके शब्दों। – Cheery

+1

हो सकता है कि आप सही @ चेरी हैं, लेकिन मैं आपको लिंक पोस्ट नहीं कर सकता क्योंकि जिस परियोजना पर मैं काम कर रहा हूं वह कमर्शियल है, और रिलीज होने तक निजी होना चाहिए ... क्षमा करें! "कोई जेएस त्रुटि नहीं है, और कोई सुराग नहीं है" मेरा मतलब है कि कंसोल आउटपुट में सब कुछ दोनों के लिए समान है: क्रोम और एफएफ, और एफएफ के लिए यह काम नहीं करता है। इसके अलावा कोई त्रुटि और चेतावनी नहीं है। – Karol

+0

'इसके अलावा वहाँ कोई त्रुटि और warning.' है और इसके अलावा यह 'प्रयोग' न कि 'सैद्धांतिक विचार' की आवश्यकता है। – Cheery

उत्तर

9

मैं हो रही थी एक बहुत ही समान मुद्दा और एक जवाब के साथ संघर्ष कर रहा था। खेलने के लिए मेरी कॉल वीडियो() काम नहीं लग रहा था।

मूल:

$('#play_movie').click(function(){ 
    $('#video').show(); 
    if(player) 
    { 
     if(typeof player.playVideo == 'function') 
     { 
      player.playVideo(); 
     } 
    } 

मुद्दा यह है कि खिलाड़ी अभी तक उपलब्ध नहीं था - अगर मैं सिर्फ यह दिखाने के लिए समय का एक सा दिया था, उसके बाद कॉल काम किया

$('#play_movie').click(function(){ 
    $('#video').show(); 
    if(player) 
    { 
     var fn = function(){ player.playVideo(); } 
     setTimeout(fn, 1000); 
    } 

डॉन ' पता नहीं अगर यह अपने सटीक मुद्दा है, लेकिन मुझे आशा है कि यह किसी

+0

यह कुछ मामलों के लिए एक समाधान हो सकता है। – Karol

+3

एक 'ऑनरेडी' घटना है जो प्लेयर द्वारा ट्रिगर की जाती है, न कि 'onYouTubeIframeAPIReady' पर, आप इसका उपयोग कर सकते हैं, यह और अधिक सही लगता है। –

+0

'playVideo() 'विधि क्रोम में मेरे लिए काम कर रही थी, लेकिन एफएफ और आईई में विफल रही। आईई ने एक त्रुटि की सूचना दी कि ऑब्जेक्ट विधि का समर्थन नहीं करता है। एक बार मैंने टाइमआउट जोड़ा, यह एक आकर्षण की तरह काम किया। धन्यवाद! – gtr1971

7

कि अगर खिलाड़ी के लिए तैयार है की जाँच करने के लिए है करने के लिए एक और अधिक मजबूत तरीका मदद करता है। खिलाड़ी तैयार नहीं है, तो कतार player.playVideo() और इसे निष्पादित जब यह onReady घटना का उपयोग कर तैयार है। Gist

var playerConfig = {},     // Define the player config here 
    queue = {       // To queue a function and invoke when player is ready 
     content: null, 
     push: function(fn) { 
     this.content = fn; 
     }, 
     pop: function() { 
     this.content.call(); 
     this.content = null; 
     } 
    }, 
    player; 

window.onYouTubeIframeAPIReady = function() { 
    player = new YT.Player('player', { 
    videoId: 'player', 
    playerVars: playerConfig, 
    events: { 
     onReady: onPlayerReady 
    } 
    }); 
}; 

// API event: when the player is ready, call the function in the queue 
function onPlayerReady() { 
    if (queue.content) queue.pop(); 
} 

// Helper function to check if the player is ready 
function isPlayerReady(player) { 
    return player && typeof player.playVideo === 'function'; 
} 

// Instead of calling player.playVideo() directly, 
// using this function to play the video. 
// If the player is not ready, queue player.playVideo() and invoke it when the player is ready 
function playVideo(player) { 
    isPlayerReady(player) ? player.playVideo() : queue.push(function() { 
               player.playVideo(); 
              }); 
} 
+0

मुझे यह दृष्टिकोण भी पसंद है। इस तरह से कभी सोचा नहीं - जैसा कि आपने कहा था साफ और मजबूत। – Karol

+0

उत्तर स्वीकार किया जाना चाहिए! अगर मुझे आपके अर्थशास्त्र के बारे में शिकायत करनी पड़ी, तो मैं कहूंगा कि आपकी कतार वास्तव में एक कतार नहीं है (पुश/पॉप के साथ भ्रमित), लेकिन आप जो कर रहे हैं वह वास्तव में काफी अच्छा है। –

1

मैं इस पोस्ट कुछ इसी तरह की तलाश में जाना। मैं अपने जवाब यहां पाया, relic180 द्वारा:

YouTube API - Firefox/IE return error "X is not a function" for any 'player.' request

असल में, क्रोम YouTube प्रारंभ कर सकते हैं एम्बेड करता है तब भी जब divs छिपे हुए हैं (अर्थात display:none), लेकिन एफएफ और IE नहीं कर सकता।

मैं left:200% करने के लिए अपने खिलाड़ी या जो कुछ भी जब मैं यह अदृश्य लेकिन प्रारंभ हो रही है (और player करने के लिए अन्य कॉल के लिए उपलब्ध है), फिर इसे वापस स्क्रीन पर जब मैं इसकी आवश्यकता ले जाना चाहते हैं के लिए कदम: मेरा समाधान relic180 के का एक संस्करण था।

0

मुझे व्यक्तिगत रूप से प्रीसेट IFrames पर मिला, कि यदि आप https://www.youtube.com डोमेन के रूप में उपयोग नहीं करेंगे तो एपीआई ठीक से काम नहीं करेगा। इसलिए सावधान रहें कि "www" पर ध्यान न दें। अन्यथा एपीआई प्लेयर ऑब्जेक्ट बनाएगा लेकिन विधियों को निष्पादित करने में विफल रहेगा।