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

173
Views
Mi extensión de Chrome más simple no surtió efecto

No estoy familiarizado con JavaScript.

Yo mismo escribí una extensión, pero no funcionó.

La función extendida es muy simple, es decir, activar el parámetro onselectstart , porque este parámetro en la página web hace que sea imposible seleccionar el texto de la página web y luego copiarlo. Si activo este parámetro, puedo seleccionar y copiar.

Puedo ejecutar este comando de JavaScript directamente en la consola de Chrome y habilitar onselectstart , funciona bien:

 document.body.onselectstart = function(){return true;};

pero no tendrá efecto después de ponerlo en la extensión.

Mi extensión es muy simple, solo dos archivos:

manifest.json :

 { "manifest_version": 2, "name": "Copy unblocker", "version": "1.0", "description": "enable onselectstart", "icons": { "16": "images/logo.png" }, "permissions": [ "activeTab" ], "content_scripts": [ { "matches": ["<all_urls>"], "js": ["js/content_script.js"] } ] }

content_ script.js :

 document.body.onselectstart= function(){ return true; }

¿Qué pasa, o puedes darme un script de extensión de Chrome que pueda cambiar el parámetro onselectstart ?

árboles de archivo

ingrese la descripción de la imagen aquí

La página web es generada por JS. Este parámetro me impide seleccionar texto

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

0

Devolver true no ayudará, este valor no hace nada en los eventos DOM. Funcionó en la consola porque su oyente simplemente reemplazó al oyente de la página, pero no funciona en scripts de contenido ya que su código JS y los objetos están aislados de la página por diseño.

Una solución es agregar ese código en un elemento de secuencia de comandos a la página como se explica en esta respuesta , pero ejecutar el código en el contexto de la página no es 100% seguro debido a un error en las implementaciones de extensiones de Chrome y Firefox WebExtensions ( wrappedJSObject también se ve afectado) .

Aquí hay una solución más simple: evitar que la página vea el evento.

 // Specifying `true` to register a capturing phase listener window.addEventListener('selectstart', e => e.stopPropagation(), true);

Alguna explicación. Los eventos del DOM se envían en dos fases: 1) la fase de captura, en la que el evento viaja de la window al document de <html> a <body> y desciende hasta el elemento que desencadenó el evento, y 2) la fase de propagación, en la que el evento surge desde el elemento de destino hacia arriba a través de la jerarquía del árbol DOM hasta la window .

La fase predeterminada para los oyentes de eventos es "burbujeante", por lo que la solución más fácil es registrar a su oyente en la fase de "captura", donde detendrá la "propagación" del evento para evitar que los oyentes posteriores vean el evento. Lo hicimos en window , que es el primer destinatario en esta fase, por lo que nuestro oyente es el primero.

Algunos sitios pueden eludirlo utilizando el mismo código y ejecutándolo primero, lo que puede suceder fácilmente porque los scripts de contenido se ejecutan después de DOMContentLoaded de forma predeterminada. Para luchar contra eso, puede declarar su secuencia de comandos de contenido con "run_at": "document_start" para que se ejecute antes de que la página haya ejecutado sus secuencias de comandos.

 "content_scripts": [{ "matches": ["<all_urls>"], "js": ["js/content_script.js"], "run_at": "document_start" }] }
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!