Search code examples
javascriptpostmessage

How to setTimeout for listening to messages coming from window.postMessage?


How can I listen to the messages coming from window.postMessage only for amount of time?

I tried to use setTimeout inside the the event listener's function but this doesn't work.

My try:

function processMessages(message) {
//setTimeout(function() {
    if (message) {
        console.log("you have a message");
    } else {
        console.log("no messages came"); //<=== I can't get here!
    }
//},10000);
    window.removeEventListener("message", processMessages, false);
}

window.addEventListener("message", processMessages, false);

Solution

  • Rearrange your code to place .removeEventListener() call within setTimeout(), which does not need to be within processMessage function

    function processMessages(message) {
        if (message) {
            console.log("you have a message");
        } else {
            console.log("no messages came"); //<=== I can't get here!
        }   
    }
    
    window.addEventListener("message", processMessages, false);
    
    var timeout = setTimeout(function() {
                    window.removeEventListener("message", processMessages, false);
                  }, 10000);