Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

230
Views
Trabajador de servicio persistente en la extensión de Chrome

Necesito definir mi Service Worker como persistente en mi extensión de Chrome porque estoy usando la API webRequest para interceptar algunos datos pasados en un formulario para una solicitud específica, pero no sé cómo puedo hacerlo. Lo he intentado todo, pero mi Service Worker sigue descargando.

¿Cómo puedo mantenerlo cargado y esperando hasta que se intercepte la solicitud?

over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Las devoluciones de llamada de WebSocket registradas desde los registros de escucha de chrome.runtime del trabajador de servicio de mis extensiones no se invocarían, lo que parece casi el mismo problema.

Me acerqué a este problema asegurándome de que mi trabajador de servicio nunca termine, al agregarle el siguiente código:

 function keepServiceRunning() { setTimeout(keepServiceRunning, 2000); } keepServiceRunning()

Después de esto, mis devoluciones de llamada ahora se invocan como se esperaba.

over 4 years ago · Santiago Trujillo Report

0

Si entiendo correctamente, puede despertar al trabajador del servicio (background.js) mediante alertas. Mira el siguiente ejemplo:

  1. manifiesto v3
 "permissions": [ "alarms" ],
  1. trabajador de servicio background.js:
 chrome.alarms.create({ periodInMinutes: 4.9 }) chrome.alarms.onAlarm.addListener(() => { console.log('log for debug') });

Desafortunadamente, este no es mi problema y es posible que usted también tenga un problema diferente. Cuando actualizo la extensión de desarrollo o detengo y ejecuto la extensión de producción, algún trabajador del servicio muere. Cuando cierro y abro el navegador, el trabajador no se ejecuta y los oyentes dentro del trabajador tampoco lo ejecutan. Intentó registrar al trabajador manualmente. Por ejemplo:

 // override.html <!DOCTYPE html> <html lang="en"> <head>...<head> <body> ... <script defer src="override.js"></script> <body> <html>
 // override.js - this code is running in new tab page navigator.serviceWorker.getRegistrations().then((res) => { for (let worker of res) { console.log(worker) if (worker.active.scriptURL.includes('background.js')) { return } } navigator.serviceWorker .register(chrome.runtime.getURL('background.js')) .then((registration) => { console.log('Service worker success:', registration) }).catch((error) => { console.log('Error service:', error) }) })

Esta solución me ayudó parcialmente, pero no importa porque tengo que registrar al trabajador en diferentes pestañas. Puede ser que alguien sepa la decisión. daré placer.

over 4 years ago · Santiago Trujillo Report

0

a diferencia de la API de chrome.webRequest, la API de chrome.webNavigation funciona perfectamente porque la API de chrome.webNavigation puede despertar al trabajador del servicio , por ahora puede intentar colocar la API de la API de chrome.webRequest dentro de chrome.webNavigation .

 chrome.webNavigation.onBeforeNavigate.addListener(function(){ chrome.webRequest.onResponseStarted.addListener(function(details){ //............. //............. },{urls: ["*://domain/*"],types: ["main_frame"]}); },{ url: [{hostContains:"domain"}] });
over 4 years ago · Santiago Trujillo Report

0

Como la respuesta de Clairzil Bawon samdi de que chrome.webNavigation podría despertar al trabajador del servicio en MV3, aquí hay una solución en mi caso:

 // manifest.json ... "background": { "service_worker": "background.js" }, "host_permissions": ["https://example.com/api/*"], "permissions": ["webRequest", "webNavigation"] ...

En mi caso, escucha el evento onHistoryStateUpdated para despertar al trabajador del servicio:

 // background.js chrome.webNavigation.onHistoryStateUpdated.addListener((details) => { console.log('wake me up'); }); chrome.webRequest.onSendHeaders.addListener( (details) => { // code here }, { urls: ['https://example.com/api/*'], types: ['xmlhttprequest'], }, ['requestHeaders'] );
over 4 years ago · Santiago Trujillo Report

0

Encontré una solución diferente para mantener viva la extensión. Mejora la respuesta de wOxxOm al usar una extensión secundaria para abrir el puerto de conexión a nuestra extensión principal. Luego, ambas extensiones intentan comunicarse entre sí en caso de que alguna se desconecte, por lo tanto, las mantiene vivas.

La razón por la que esto era necesario era que, según otro equipo de mi empresa, la respuesta de wOxxOm resultó ser poco fiable. Según se informa, su SW eventualmente fallaría de manera no determinista.

Por otra parte, mi solución funciona para mi empresa ya que estamos implementando software de seguridad empresarial y forzaremos la instalación de las extensiones. Hacer que el usuario instale 2 extensiones aún puede ser indeseable en otros casos de uso.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!