Estoy tratando de pasar un parámetro a la función llamada por chrome.scripting.executeScripts pero parece que la función no puede pasar los parámetros de la extensión.
Mi extensión contiene varias entradas, cuando se enfoca una entrada, la extensión debe pasar un determinado parámetro del conjunto de datos de entrada a la función ejecutada por el script de Chrome para establecer el valor de una entrada en la página, autor
let bookInputs = [...document.getElementsByClassName('book-input')]; bookInputs.forEach(bookInput=> { bookInput.addEventListener('focus', () => getBook(bookInput.dataset.author)) }) async function getBook(author) { let [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); chrome.scripting.executeScript({ target: { tabId: tab.id }, function: () => enterBookAuthor(author) }) } function enterBookAuthor(author) { const book= document.getElementById('book-author'); //an input in the page book.value = author; }Pero este código no logra cumplir la misión, por lo que
¿Por qué las funciones ejecutadas por las secuencias de comandos de Chrome no pueden recibir parámetros de la extensión y qué puedo hacer para solucionarlo?
Debe usar la propiedad args, porque las secuencias de comandos no transfieren ninguno de los contextos de ejecución actuales de la función.
Aquí hay un ejemplo:
let bookInputs = [...document.getElementsByClassName('book-input')]; bookInputs.forEach(bookInput=> { bookInput.addEventListener('focus', () => getBook(bookInput.dataset.author)) }) async function getBook(author) { let [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); chrome.scripting.executeScript({ target: { tabId: tab.id }, func: enterBookAuthor, args: [author], // this is the args property. }) } function enterBookAuthor(author) { const book= document.getElementById('book-author'); //an input in the page book.value = author; }Aquí están los enlaces a los documentos: https://developer.chrome.com/docs/extensions/reference/scripting/#runtime-functions