67

When I use jQuery event listener to handle message event, like below:

$(window).on('message', function(e) {
    var data = e.data; // data = undefined
});

data is undefined! I'm sure that I have passed data to current window. Because if I use "addEventListener", everything goes well!

So, what's the problem?

2 Answers 2

118

jQuery might be preprocessing the event's data property, and this operation may not properly support the message event (yet).

Try using the originalEvent property to fetch your data:

$(window).on("message", function(e) {
    var data = e.originalEvent.data;  // Should work.
});
Sign up to request clarification or add additional context in comments.

4 Comments

A +1 for you, this just helped me stop pulling my hair out.
What is the best way to also handle "onmessage" in IE?
@grim, IE has problems in its support for postMessage(). See developer.mozilla.org/en-US/docs/Web/API/… and Is cross-origin postMessage broken in IE10?.
+1 - a solution I was looking for. yet I could not unbind the event using $(window).off("message"). on the other hand, $(window).bind / $(window).unbind successfully attached / detached for me a handler to the message event.
15

Some browsers use the "onmessage" event. I suggest a little improvement to the previous answer for increased compatibility:

$(window).on("message onmessage", function(e) {
    var data = e.originalEvent.data;
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.