Enviar objeto de nó DOM via chrome.tabs.sendMessage
Estou escrevendo uma extensão do Chrome. Eu preciso passar um objeto de elemento do script de conteúdo para o script de segundo plano.
O objetivo:
A extensão é sobre gravar e reproduzir ações do usuário.
Os dados são salvos no armazenamento local da extensão em objeto diferente para cada guia (por ID da guia).
A estrutura de dados é uma lista de{x: x, y:y, element: element}
Quando o usuário deseja reproduzir, estou usando um loop para cada objeto na lista e usando.click()
no elemento
Código no script de conteúdo:
A função que envia uma mensagem para o script em segundo plano:
function addToEventHistory(cords) {
console.log(cords)
chrome.runtime.sendMessage({action: "addToEventHistory", cords: cords}, function(response) {
return response;
});
}
A função que obtém o elemento e o sente:
mouseClick: function(e) {
var target = e.target || e.srcElement
var clickEvent = {x: e.pageX, y: e.pageY, element: target}
addToEventHistory(clickEvent)
}
O código no script em segundo plano:
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();
O problema é que o elemento que estou enviando é recebido como um objeto vazio. aviso para oconsole.log
em enviar e receber. as saídas são:
enviando:
Object {x: 1205, y: 1067, element: div#content.snippet-hidden}
recebendo:
Object {x: 1205, y: 1067, element: Object}
* o elemento Object está vazio e possui apenas_proto_
Qual é a razão?
Como posso resolver este problema?
Parece que o problema não está serializando o objeto DOM, porque o objeto parece bem antes do envio e não está bem no recebimento.