यूट्यूब api // onStateChange कॉलबैक फ़ंक्शंस के लिए इसकी आवश्यकता है!एक जावास्क्रिप्ट फ़ंक्शन प्रोग्रामेटिक रूप से
मैं प्रोग्रामेटिक रूप से ऐसे फ़ंक्शन बनाना चाहता हूं जो कई यूट्यूब प्लेयर द्वारा उत्सर्जित "ऑनस्टेट चेंज" ईवेंट सुनेंगे। श्रोता जोड़ना पहले से ही काम करता है:
function onYouTubePlayerReady(playerId) {
var ytpStateManager = playerId +"_StateManager";
document.getElementById(playerId).addEventListener("onStateChange", ytpStateManager);
...
समारोह मैं playerId चर ("ytp_1", "ytp_2", ...) के आधार पर बनाने की जरूरत
function ytpStateManager(newState) {
ytpStateHelper(playerId , newState);
}
तो के लिए परिणाम है भी
function ytp_1_StateManager(newState) {
ytpStateHelper("ytp_1", newState);
}
वर्क्स लेकिन अभी मैं उनके प्रत्येक खिलाड़ी के लिए मैन्युअल रूप से जोड़ने के लिए है, जो कि मैं क्या करने की जरूरत नहीं है की जरूरत है: playerId "ytp_1" इस प्रकार दिखाई देगा। जब कोई नया खिलाड़ी तैयार स्टार्ट इवेंट भेजता है तो मैं उन्हें स्वचालित रूप से बनाना चाहता हूं।
मेरी समस्या यह है कि ऐसा लगता है कि इन कार्यों को ठीक से काम करने के लिए वैश्विक कार्यों की आवश्यकता है। मैंने दिनों के लिए कई विकल्पों की कोशिश की। मेरी समस्या यह है कि मुझे नहीं पता कि वैश्विक कार्य को परिभाषित करने के लिए (यदि कोई तरीका है), सहित। फ़ंक्शन नाम, प्रोग्रामेटिक रूप से, किसी अन्य चर के आधार पर।
यह एक बमर है कि ytp किसी ईवेंट को उत्सर्जित नहीं करता है जिसमें राज्य और खिलाड़ी/लक्ष्य शामिल होता है। चीजों को और अधिक आसान बना देगा। यह सब मूल रूप से कामकाज है क्योंकि मुझे सभी राज्यों पर सामान करने की ज़रूरत है।
यदि कोई बेहतर/सरल तरीका है, तो कृपया मुझे बताएं :) अन्यथा इस प्रश्न का समाधान अत्यधिक स्वागत है।
शायद इसे "सुलभ" बनाने के लिए ईवेंट को फिर से शुरू करने का कोई तरीका है?
मैंने इस spec में पढ़ा है कि .addEventListener भी एक वस्तु लेता है, इसलिए मैंने ईवेंट को समर्पित ऑब्जेक्ट में बांधने की कोशिश की। लेकिन फिर, यह ट्रिगर नहीं हुआ था। लगता है जैसे मैं सब कुछ परीक्षण किया ...
अद्यतन मैं अब (swfObject से) आइफ्रेम खिलाड़ी का उपयोग करने जा रहा हूँ, क्योंकि यह है कि एक एक घटना है जो playerId और राज्य शामिल प्रदान करता है: डी yeahhh !! गलत ytplayer के साथ सप्ताह बिताने के बाद यह एक महान प्रगति की तरह लगता है। ऐसा लगता है कि वाईटी चाहता है कि हम आईफ्रेम प्लेयर का उपयोग करें जो समर्थित होने पर एचटीएमएल 5 का गतिशील रूप से उपयोग कर सके।
मैंने पहले और अभी यह कोशिश की लेकिन यह मेरे लिए काम नहीं कर रहा है। प्वाइंट उस समय "createStateManager" को "playerId" कहा जाता है और "ytpStateHelper" चर पैरेंट फ़ंक्शन से आते हैं लेकिन उस समय newState परिभाषित नहीं किया जाता है क्योंकि यह ईवेंट ट्रिगर होने पर ytp स्थिति होगा। –
यह काम करना चाहिए ... क्या आपने पोस्ट किए गए अंतिम संस्करण का परीक्षण किया था (मैंने पोस्ट करने के तुरंत बाद कोड संपादित किया था)। – bfavaretto
जब मैं कारखाने को राज्य परिवर्तन पर बुलाता हूं तो इसके परिणामस्वरूप बहुत सारे कार्य होंगे लेकिन कोई भी ट्रिगर नहीं होगा। कॉलबैक को फ़ंक्शन नाम होना चाहिए और इस नाम के साथ एक फ़ंक्शन स्वचालित रूप से बनाया जाना चाहिए। अन्यथा ट्रिगर काम नहीं करेगा क्योंकि मैंने इसे दिनों के लिए परीक्षण किया है। इसका परीक्षण किया, काम नहीं करता है। अब मैं sth परीक्षण कर रहा हूँ। उस दिशा में। –