2013-10-13 4 views
13

ठीक है तो मैं इस तरह की एक घटना listenr सेट कर लेते हैं ...मेरे पैरामीटर प्रेषित ईवेंट के माध्यम से क्यों नहीं पारित हो रहे हैं?

window.addEventListener('message', parseMessage, false); 

var parseMessage = function(rawMessage) { 
    console.log(rawMessage.cmd); 
}; 

और फिर मैं इस तरह घटना को ट्रिगर कर रहा हूँ:

var event = new Event('message', {'cmd':"blerg!"}); 

window.dispatchEvent(event); 
समस्या

में console.log है जब मैं "ब्लर्ज" लॉग आउट करने की उम्मीद कर रहा हूं तो पार्स संदेश अपरिभाषित हो रहा है

मैं घटनाओं के साथ यहां क्या कर रहा हूं, मैं घटना के माध्यम से 'cmd' संदेश कैसे पास करूं?

+0

आप 'का उपयोग करना चाहिए CustomEvent': https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/ घटनाक्रम/Creating_and_triggering_events? Redirectlocale = en-US और redirectslug = वेब% 2FGuide% 2FDOM% 2FEvents% 2FCreating_and_triggering_events # adding_custom_data_.E2.80.93_CustomEvent – ComFreek

+0

@ Qantas94Heavy मेरा उत्तर देखें। – ComFreek

उत्तर

41
  1. उपयोग CustomEventबजाय Event की कस्टम घटनाओं बनाने के लिए।

  2. अपने डेटा को 'विवरण' ऑब्जेक्ट में निर्दिष्ट करें (कोड देखें)।

  3. मैंने ईवेंट का नाम बदल दिया क्योंकि message का उपयोग postMessage API के लिए भी किया जाता है। क्रोम में चलते समय इससे समस्याएं उत्पन्न नहीं हुईं, लेकिन मैं इसका उपयोग नहीं करता।

 

var parseMessage = function(rawMessage) { 
    console.log(rawMessage); 
    console.log(rawMessage.detail.cmd); 
}; 

// changed event name 
window.addEventListener('myMessage', parseMessage, false); 

// data should be in a 'details' object 
var evt = new CustomEvent('myMessage', { 
    detail: { 
     'cmd' : "blerg!" 
    } 
}); 

window.dispatchEvent(evt); 

यहाँ के लिए IE> = 9 संगतता एक समायोजन है (document.createEvent() और CustomEvent::initCustomEvent() उपयोग करते हुए):

var evt = document.createEvent("CustomEvent"); 
evt.initCustomEvent('myMessage', false, false, { 
    'cmd': "blerg!" 
}); 
+0

यह शानदार धन्यवाद है, बस सोच रहा है, क्या इसे 'विवरण' नामक एक जेसन के अंदर होना चाहिए या क्या आपने कुछ जोड़ा है? – Smickie

+1

@Smickie आपका कस्टम डेटा 'विस्तार' कुंजी में रहना है। यह अन्यथा काम नहीं करता है। (बीटीडब्ल्यू, इसे 'जेसन' नहीं कहा जाता है। 'विस्तार' एक तथाकथित "कुंजी" है)। – ComFreek

+0

अच्छा जवाब। बीटीडब्ल्यू, ऑब्जेक्ट लिटलल वह शब्द है जिसे आप 'टाइपऑफ ({विस्तार: {cmd:' blerg! '}} की तलाश में रखते हैं)। विस्तार' ;-) – LessQuesar

12

IE9/10 polyfill के लिए आपके द्वारा दी गई इस कोड का उपयोग कर सकते हैं मोज़िला द्वारा:
https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent

(function() { 
    function CustomEvent (event, params) { 
    params = params || { bubbles: false, cancelable: false, detail: undefined }; 
    var evt = document.createEvent('CustomEvent'); 
    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); 
    return evt; 
    } 

    CustomEvent.prototype = window.Event.prototype; 

    window.CustomEvent = CustomEvent; 
})(); 

इसके अलावा यहाँ वर्णित लेकिन गलत यूआरएल के साथ: https://stackoverflow.com/a/22946340/1736012

+0

यह आईई 11 में भी इसे ठीक करता है –

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