Enviar objeto de nodo DOM a través de chrome.tabs.sendMessage

Estoy escribiendo una extensión de Chrome. Necesito pasar un objeto elemento del script de contenido al script de fondo.

La meta:
La extensión se trata de grabar y reproducir acciones del usuario.
Los datos se guardan en el almacenamiento local de la extensión en un objeto diferente para cada pestaña (por ID de pestaña).
La estructura de datos es una lista de{x: x, y:y, element: element}
Cuando el usuario quiere reproducir, estoy usando un bucle para cada objeto en la lista y usando.click() en el elemento



Código en script de contenido:

La función que envía un mensaje al script de fondo:

function addToEventHistory(cords) {
    console.log(cords)
    chrome.runtime.sendMessage({action: "addToEventHistory", cords: cords}, function(response) {
        return response;
    });
}

La función que obtiene el elemento y lo siente:

mouseClick: function(e) {
                var target = e.target || e.srcElement
                var clickEvent = {x: e.pageX, y: e.pageY, element: target}
                addToEventHistory(clickEvent)
            }

El código en el script de fondo:

var tabId = sender.tab.id;
var existingRecords = JSON.parse(localStorage.getItem('record_'+tabId)) || [];
existingRecords.push(request.cords)
console.log(request.cords)
localStorage.setItem('record_'+tabId, JSON.stringify(existingRecords));
sendResponse();

El problema es que el elemento que estoy enviando se recibe como un objeto vacío. aviso a laconsole.log En enviar y recibir. las salidas son:

enviando:

Object {x: 1205, y: 1067, element: div#content.snippet-hidden}

recepción:

Object {x: 1205, y: 1067, element: Object}

* el elemento Object está vacío y solo tiene_proto_

¿Cual es la razon?
¿Cómo puedo resolver este problema?

Parece que el problema no es serializar el objeto DOM, porque el objeto se ve bien justo antes del envío y no está bien al recibirlo.