Desbloquea la copia, la selección y el clic derecho en cualquier página
Caes en un artículo, quieres copiar un párrafo a tus notas — y la página no te deja seleccionar el texto. El clic derecho no hace nada. No es un bug del navegador, es un bloqueo deliberado en el JavaScript de la página. Este artículo muestra cómo eliminarlo con una sola regla JustZix.
Cómo las páginas bloquean la copia
No existe ningún «modo solo lectura» en HTML. Una página que bloquea la selección lo hace de dos maneras:
- CSS —
user-select: nonesobre los elementos de texto. - JavaScript — handlers para los eventos
copy,selectstart,contextmenuque llaman apreventDefault().
Ambos pueden anularse, porque ambos se ejecutan en el navegador — y tú tienes el control completo de tu navegador.
¿Es legal?
Sí. El texto ya está en tu pantalla — la página te lo ha enviado. Eliminar el bloqueo de la copia no esquiva ninguna protección del contenido, porque no hay ninguna; es solo una molestia UX. El derecho de autor sobre el texto en sí es otra cuestión — lo que hagas con el fragmento copiado depende de ti.
La regla — CSS más JS
Pon el patrón de URL en la página que te molesta (o * globalmente). En la pestaña JavaScript de la regla, pega:
['copy', 'cut', 'contextmenu', 'selectstart', 'dragstart']
.forEach(evt =>
document.addEventListener(evt, e => e.stopPropagation(), true)
);
const s = document.createElement('style');
s.textContent =
'*{user-select:text!important;-webkit-user-select:text!important}';
document.documentElement.appendChild(s);
Cómo funciona
stopPropagation en la fase de capture
El tercer argumento de addEventListener puesto a true indica la fase de capture. Nuestro listener captura el evento antes de que alcance el handler de la página y llama a stopPropagation() — la propagación se detiene, y el handler de la página (el que tiene preventDefault()) nunca recibe el evento.
El style inyectado
El segundo bloque añade una regla CSS con user-select: text !important. El !important vence a cualquier user-select: none de la página. Lo inyectamos desde el JS (en lugar de como CSS de la regla) para que aterrice justo al final de la cascada y sea seguro que gana.
La variante solo-CSS
Si el bloqueo es puramente CSS, el JS es inútil — basta la pestaña CSS de la regla:
* { user-select: text !important; -webkit-user-select: text !important; }
Prueba esto primero. Si la selección todavía no funciona, la página bloquea también en JS y te hace falta la versión completa.
Trampas
- Campos de contraseña. Algunas páginas bloquean la copia de los campos
passworda propósito — ese bloqueo puede ser sensato, déjalo. - Contenido cargado después. El
<style>inyectado cubre también los elementos añadidos al DOM tras el arranque — funciona en las SPA. - Esto no esquiva un paywall. Desbloquear la selección revela texto que ya tienes. No descubrirá contenido oculto tras un login.
Mira también
- Ejemplos — este y otros snippets listos para usar
- Atajos de teclado personalizados — otro patrón de event listener
- Oculta los banners de cookies — CSS para los elementos invasivos
Instala JustZix — y copia de cada página que intenta impedírtelo.
Valora este artículo
Sin valoraciones — sé el primero.