'data' is null or not an object IE8
internet-explorer, javascript, jquery, jquery-events
Solution
IE8 still lacks DOM2 event attachment, still using the global `event` object rather than one it passes into event handlers. You've said the error is `'data' is null or not an object`, are you sure it's not `'e' is null or not an object`?
If it is, then this should fix it:
window.onmessage = function(e){
e = e || window.event;
if (e.data) {
// ...
}
};
On IE8 and earlier, no argument is passed into event handlers. Instead, you look at the global `event` variable (global variables are also properties of the `window` object). So on IE8 and earlier, `e` will be `undefined`, whereas on IE9+ and all other browsers, `e` will be the event object.
So this line:
e = e || window.event;
...uses the curiously-powerful `||` operator, which will return its first argument if that argument is "truthy," or its second argument if the first is "falsey." Since `undefined` is falsey, on IE8 and earlier, `e = e || window.event` assigns `window.event` to `e`. On IE9+ and all other browsers, it just assigns `e` back to itself (a no-op).
This is a common pattern in code that has to interact with both IE8 and earlier and browsers that pass the event object into the handler.
Problem
I am transmitting message from an iframe to its parent page using `postMessage`. This is my code. In iframe: ``` $(".history_date").click(function(event) { window.top.postMessage($(this).text(), "*"); }); ``` In parent page: ``` $(function(){ window.onmessage = function(e){ if(e.data){ //do something } }; }); ``` It works well in Chrome, Firefox and IE9/10, but in IE8, the error indicates 'data' is null or not an object. How to fix it?