Ping and Pong Simple Messages

To communicate with the script you must set a localStorage item with some data. The first Item variable name it looks for is 'JR_message_ping_pandacrazy'. The item value isn't important because it only uses the theTarget and url value from the localStorage. I just set the value to an object which must be a string so I use stringify on the object: {"command":"areYouThere","time":datetime})).

  • To send a ping for attention:
    • localStorage.setItem("JR_message_ping_pandacrazy", JSON.stringify({"command":"areYouThere","time":(new Date().getTime())}));

Once the main script gets the message it will send a pong message which uses a unique variable. The variable starts with 'JR_message_pong_' and ends with '_pandacrazy'. So by adding an event for storage you can find any variables that get changed. Watch for the variables that start with ''JR_message_pong' and you will know that the main script is running. That is how I add buttons to mturk pages with the helper script only if the main script is running.

  • For example this is what I used to receive a pong message.
    • window.addEventListener("storage", mainListener, false);
  • In the mainListener function I would look for the key which starts with the pong string. I also make sure there is a newValue and the location is the location for your script.
    • if ( e.key == 'JR_message_pong_' + gScriptName && e.newValue && gLocation == (JSON.parse(e.newValue).url)) {

Now this is a simple ping and pong messaging which is done for simple things like find out if the main script is running. I do recommend to do this so users won't have buttons that do nothing. In fact you don't have to do a ping for some of the external actions for this script but this is a good beginning of how the process of messaging is done.

Joomla SEF URLs by Artio