Guardar campos de entrada Extensión de Chrome

Necesito crear una extensión que tenga dos botones: Copiar y Pegar. El botón Copiar seleccionará el contenido de las entradas de texto y las áreas de texto en la página y lo guardará en el módulo de almacenamiento. El botón Pegar pegará el texto guardado en otra página dentro de las entradas y áreas de texto con las mismas identificaciones.

Me las arreglé para hacer que funcionara usando almacenamiento local, pero solo guardó el contenido en el mismo dominio. He intentado usar el módulo chrome.storage para almacenar y recuperar los datos; No pude hacerlo funcional.

¿Puede decirme cuál es el mejor enfoque para este problema?

Actualizar: La extensión funciona, pero con un pequeño inconveniente:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {      
        storage.get('form_data', function(item) {
            sendResponse(item);
        });   
    }
});

Esto devuelve un error: No se pudo enviar la respuesta: el oyente chrome.extension.onMessage debe devolver verdadero si desea enviar una respuesta después de que regrese el oyente.

var form_data;
chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {      
        storage.get('form_data', function(item) {
            form_data = item;
        });   
        sendResponse(form_data);
    }
});

Esto funciona, pero tengo que llamar a la función dos veces (haciendo clic en el botón Pegar), supongo que la primera devuelve indefinido y luego obtiene los datos y la segunda llamada devuelve el valor de almacenamiento.

preguntado el 28 de agosto de 12 a las 10:08

Use una página de fondo y pase mensajes desde el script de contenido para usar chrome.storage. -

¿Puede ejemplificar pasar el mensaje y seleccionar los formularios en la página? -

1 Respuestas

Resolví ese problema con el siguiente código:

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request['request_type'] === 'copy') {
      storage.clear();
      storage.set({'form_data' : request['form_data']});
    } else if (request['request_type'] === 'paste') {
        storage.get('form_data', function(item) {
          chrome.tabs.getSelected(null, function(tab) {
            chrome.tabs.sendMessage(tab.id, item['form_data']);
          });
        });
      }
});

Respondido el 14 de Septiembre de 16 a las 17:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.