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

149
Views
chrome.scripting.executeScript tarda demasiado en iniciarse en document_start

Construyendo una extensión de Chrome de muestra, su único propósito es envolver/reemplazar fetch y XMLHttpRequest .

Fue fácil con Manifest V2 , pero parece complicado con Manifest V3 .

El reemplazo se logra usando chrome.scripting.executeScript , que se activa inmediatamente desde un script de contenido de inicio de document_start , que envía un mensaje al trabajador en background , que a su vez usa chrome.scripting.executeScript en la pestaña de llamada.

Todo toma de 500ms a 1500ms ms, lo que generalmente pierde muchas solicitudes iniciales de fetch / XMLHttpRequest , lo cual es inaceptable para mi caso de uso: necesito controlar todas las solicitudes.

¿Es posible retrasar los scripts en la pestaña original hasta que finalice el reemplazo? ¿Estoy haciendo algo mal aquí? ¿Alguna otra solución para garantizar un reemplazo antes de que se realicen las solicitudes?

(usando https://www.msnbc.com/ en este ejemplo, pero probé muchos otros sitios web)

manifiesto.json:

 { "name": "v3ChangeFetchExample", "description": "v3ChangeFetchExample", "version": "1.0", "manifest_version": 3, "background": { "service_worker": "background.js" }, "permissions": ["tabs", "scripting"], "content_security_policy": { "extension_pages": "script-src 'self'; object-src 'self'" }, "content_scripts": [ { "all_frames": true, "js": ["script.js"], "matches": ["https://www.msnbc.com/*"], "run_at": "document_start" } ], "host_permissions": ["https://www.msnbc.com/*"] }

fondo.js:

 const replaceFetch = async function (message) { fetch = {}; XMLHttpRequest = {}; console.error(`Took ${Date.now() - message}ms`); }; chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) { chrome.scripting.executeScript({ world: "MAIN", target: { tabId: sender.tab.id, allFrames: true }, func: replaceFetch, args: [message], }); sendResponse(true); });

secuencia de comandos.js:

 (function () { chrome.runtime.sendMessage(Date.now()); })();

Editar: Acabo de encontrar esto en la documentación de chrome.scripting.executeScript :

Inyecta un script en un contexto de destino. El script se ejecutará en document_idle.

Esto arroja algo de luz sobre el tema. Entonces, tal vez la pregunta debería ser: ¿Es posible ejecutar un script en document_start y no document_idle usando Manifest V3 ?

about 4 years ago · Juan Pablo Isaza
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!