Desarrollé una extensión web de Chrome, donde inyecto un .js en un sitio web para automatizar alguna tarea. Y funciona bien. Pero, cada vez que pongo esa pestaña en segundo plano, ¡no lo hace! (Se retrasa/omite setTimeout())
Entonces, después de buscar un poco en Google, escuché que era un "comportamiento normal e intencionado" y las personas sugirieron usar Web Workers. Pero ahora, cuando intento inyectar un trabajador web, el sitio me dice que es imposible debido a las directivas de CSP.
aquí hay un código de muestra:
injecter.js (que funciona bien)
if(nbrTabs > 0){ chrome.tabs.executeScript(tabs[0].id, {file: "worker.js"}); chrome.tabs.executeScript(tabs[0].id, {file: "utilities.js"}); DisableStart(); EnableStop(); save(); }trabajador.js
function main(){ setTimeout(function(){ console.log("Do the things ..."); buttonOnThePage.click(); }, 1000); return null; } onmessage = function(e){ console.log("Worker Start\n"); main(); postMessage("Worker End"); }utilidades.js
var worker = new Worker("./worker.js"); worker.onmessage = function(e) { worker.terminate(); }; worker.postMessage('Start');Cuando los uso, aparece un error en la consola que dice
GET https://www.example.com/bar/utilities.js 404Entonces, supongo que no funciona. Entonces, probé una segunda cosa, donde tengo mi trabajador Y mi 'hilo' principal en el mismo archivo, lo que resulta en:
utilidades.js
var string = ` function main(){ setTimeout(function(){ console.log("Do the things ..."); buttonOnThePage.click(); }, 1000); return null; } onmessage = function(e){ console.log("Worker Start\n"); main(); postMessage("Worker End"); }`; var blob = new Blob([string], {type: 'application/javascript'}); var worker = new Worker(URL.createObjectURL(blob)); worker.onmessage = function(e) { worker.terminate(); }; worker.postMessage('Start');Pero ahora, tengo un error que me dice "Error al construir 'Trabajador': el acceso al script en 'blob: https://www.example.com/some-rando-strings' está denegado por la Política de seguridad de contenido del documento. "