function RUNTIME(action, args, callback) {
    var actionsRepeatBackground = ['closeTab', 'nextTab', 'previousTab', 'moveTab', 'reloadTab', 'setZoom', 'closeTabLeft','closeTabRight', 'focusTabByIndex'];
    (args = args || {}).action = action;
    if (actionsRepeatBackground.indexOf(action) !== -1) {
        // if the action can only be repeated in background, pass repeats to background with args,
        // and set RUNTIME.repeats 1, so that it won't be repeated in foreground's _handleMapKey
        args.repeats = RUNTIME.repeats;
        RUNTIME.repeats = 1;
    }
    try {
        args.needResponse = callback !== undefined;
        chrome.runtime.sendMessage(args, callback);
        if (action === 'read') {
            runtime.on('onTtsEvent', callback);
        }
    } catch (e) {
        dispatchSKEvent("front", ['showPopup', '[runtime exception] ' + e]);
    }
}
Call background `action` with `args`, the `callback` will be executed with response from background.

@param {string} action a background action to be called.
@param {object} args the parameters to be passed to the background action.
@param {function} callback a function to be executed with the result from the background action.

@example

RUNTIME('getTabs', {queryInfo: {currentWindow: true}}, response => {
  console.log(response);
});