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 ?
La página web es generada por JS. Este parámetro me impide seleccionar texto
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" }] }