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

273
Views
Llamada de función múltiple a chrome.runtime.sendMessage() con comportamiento síncrono

Conecto content.js con background.js para realizar 2 tareas diferentes: inyectar HTML local y obtener datos de otra página web. Actualmente, createContainer() comienza después de que se realiza fetchweb() y no estoy seguro de por qué (necesito que createContainer() se ejecute primero). Traté de transformar ambas funciones en Promise pero sigue siendo el mismo resultado.

Contenido.js

 function createContainer1() { // call html file container chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); }); // more code } function fetchWeb() { chrome.runtime.sendMessage( { cmd: "send_url", url: window.location.href}, function (response) { console.log(JSON.stringify(response)); } ); } createContainer1() fetchWeb()

fondo.js

 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { if (request.cmd == "read_cont1") { $.ajax({ url: chrome.extension.getURL("container1.html"), dataType: "html", success: sendResponse, }); return true; } else if (request.cmd == "send_url") { sendResponse({ review_url: fetchData(request.url) }); return true; } });
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Sus dos sendMessages son funciones asíncronas y, a menos que se trate específicamente de codificación asíncrona a través de devoluciones de llamada, promesas o asíncrono/espera, no creo que haya otra forma de garantizar cuál se resuelve primero.

Si fetchWeb debe ejecutarse cada vez que createContainer envía su mensaje, puede agregar fetchWeb a la devolución de llamada de sendMessage (y luego eliminarlo de su cuerpo principal):

 ...chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); fetchWeb(); });...

Si fetchWeb solo debe ejecutarse algunas veces, podría pasar datos a la función createContainer respondiendo esa pregunta:

 function createContainer1(executeFetchWeb) { // call html file container chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); if (executeFetchWeb) {fetchWeb()} }); // more code }

Si está sucediendo algo más en "//más código" que debe suceder antes de que se ejecute fetchWeb, sería útil verlo. Pero a menos que ese código también sea asíncrono, imagino que el código ya se está ejecutando primero. Todo esto también podría hacerse con promesas, pero sendMessage ya está configurado para funcionar bien con devoluciones de llamada. De la documentación :

 chrome.runtime.sendMessage( extensionId?: string, message: any, options?: object, responseCallback?: function, )
about 4 years ago · Juan Pablo Isaza 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!