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

199
Views
Extensión de Chrome: no se puede usar `document.querySelector().click()` después de usar `document.getSelection()`

Mi extensión le permite ingresar o copiar texto de la página (usando document.getSelection() ) y luego intenta hacer clic en un botón usando document.querySelector y luego el evento de click .

Si ingreso el texto manualmente, todo funciona como se esperaba. Sin embargo, si pego el texto en la extensión usando getSelection , el evento de click se pierde.

Como referencia, esta es una versión abreviada de mi código:

 //content.js function messagesFromReactAppListener(msg, sender, sendResponse) { switch (msg.method) { case "getSelection": sendResponse({ text: document.getSelection().toString() }); break; case "replyToEmail": const replyBtn = document.querySelector(...); if (replyBtn) { replyBtn.click(); sendResponse(true); } else { sendResponse(false); } break; return true; }
 // paste function, called when button pressed on extension export function pasteText(): Promise<PasteTextRespType> { return new Promise((resolve) => { chrome.tabs && chrome.tabs.query( { active: true, currentWindow: true, }, (tabs) => { chrome.tabs.sendMessage(tabs[0].id || 0, { method: "getSelection" }, (response: PasteTextRespType) => { resolve(response); }); } ); }); }
 // associated with a submit button on the extension handleSubmit(event: any) { ... chrome.tabs && chrome.tabs.query({ active: true, currentWindow: true }, tabs => { chrome.tabs.sendMessage( tabs[0].id || 0, { method: REACT_MSG_METHODS.replyToEmail }, (resp) => { ... } ); }); event.preventDefault(); }

Sé que sería mejor si tuviera un oyente en el evento de clic antes de enviar la respuesta con verdadero, pero no he podido hacerlo de la manera correcta. La ayuda con eso también sería apreciada, pero hacer clic simplemente no funciona después de usar paste arriba.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Solo me tomó 5 días darme cuenta de esto, y me estaba volviendo completamente loco. Resulta que, cuando haces document.getSelection() , se enfoca en lo que selecciones, lo que evita que los eventos de click se disparen en otros elementos. Fue raro porque pude, por ejemplo, cambiar el css de fondo del elemento seleccionado. La solución fue cambiar el caso getSelection a:

 case "getSelection": { let sel = document.getSelection(); sendResponse({ text: sel.toString() }); sel.removeAllRanges(); break; }

Lo que elimina el foco/la selección y habilita el click para disparar.

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!