El sitio que agrega las cosas molestas de "Leer más" es ShareThis.
Para evitar este mal comportamiento, tiene tres alternativas diferentes:
Deshabilitar los eventos del portapapeles
Estos sitios web utilizan las API del Portapapeles , que permiten a los desarrolladores web interceptar las acciones de copiar / cortar / pegar y ejecutar algún código cuando se realizan. Así es como funciona ShareThis (y otros sitios web como ese). Simplemente espera el evento de copia y justo antes de que se realice la copia efectiva, agrega una "capa" adicional de texto que contiene el molesto "- Ver ...".
Ahora la pregunta es: ¿hay algún tipo de método para deshabilitar los eventos del portapapeles? Desafortunadamente, no he podido encontrar un método para hacer esto en Chrome / Chromium, pero en Firefox es posible de dos maneras diferentes.
- Entra
about:config
y busca dom.event.clipboardevents.enabled
. Haga doble clic en la tecla (configúrela como false
) y listo. Ha deshabilitado los eventos del portapapeles y nadie volverá a tocar su portapapeles.
- Para versiones anteriores de Firefox (muy, muy antiguas), existe esta extensión que hace exactamente lo mismo que la
about:config
opción.
Deshabilitar los eventos del portapapeles no debería dañar la experiencia de ningún sitio web, ya que rara vez se usan y no hay realmente un propósito para usarlos (aparte del envío de correo no deseado).
Pasemos a la segunda solución.
Block ShareThis
Si no necesita ShareThis, simplemente puede bloquear el w.sharethis.com
dominio. El Javascript responsable de cargar ShareThis (y registrar el ClipboardEvent
) se carga desde ese sitio web.
Puede bloquearlo de diferentes maneras, desde un simple filtro AdBlock hasta editar su archivo de hosts (esto no está cubierto ni vinculado aquí ya que no puedo poner más enlaces debido a mi reputación).
Un ejemplo de hacerlo a través del hosts
archivo:
127.0.0.1 w.sharethis.com
La tercera solución es la más difícil y debe usarse solo como último recurso.
Deshabilite la función de selección en los sitios web problemáticos
Para editar el contenido que se copia en el portapapeles, estos sitios web utilizan la Selection
API que les permite editar selecciones sobre la marcha. Por lo tanto, una solución es deshabilitar por completo cualquier tipo de Selection
(en el lado del código, obviamente. Aún podrá realizar selecciones).
Esto se puede hacer con un simple script Tampermonkey / Greasemonkey. Lo probé solo en Firefox ya que no puedo instalar Chrome en este momento. Lo siento por eso.
Este es el código fuente:
// ==UserScript==
// @name Goodbye selections
// @namespace tag: utils
// @include $put_here_a_website_you'd_like_to_disable_selections$
// @include $more_websites$
// @version 1
// @grant none
// ==/UserScript==
(function() {
var disableSelections = function() {
document.getSelection = window.getSelection = function() {
return { isCollapsed: true };
};
};
var script = document.createElement ("script");
script.appendChild (document.createTextNode ("(" + disableSelections + ")();"));
(document.body || document.head || document.documentElement).appendChild (script);
})();
Para que esto funcione, debe crear una nueva secuencia de comandos Greasemonkey / Tampermonkey y ajustar las @include
directivas. Puede poner un sitio web por línea, y debe hacerse como @include http://bad.website.address/
.
Lo probé con los sitios web que ha vinculado y funciona sin problemas. Sin embargo, tenga en cuenta que esto puede causar problemas, ya que Selection
los sitios web perfectamente legítimos usan s (por ejemplo, los cuadros de texto de StackExchange los usan para insertar un símbolo, cuando hace clic en el botón, en la posición de su cursor), por lo que debe habilitar ese script de usuario solo en sitios web problemáticos.
(tenga en cuenta que es posible que deba eliminar las líneas que comienzan con //
si está creando el script de usuario de los menús Greasemonkey / Tampermonkey, lo agregarán automáticamente)
La explicación del script de usuario es bastante simple. Primero, define una función llamada disableSelections
que reemplaza el valor predeterminado document.getSelection
y window.getSelection
funciones con una que simplemente devuelve un objeto que contiene { isCollapsed: true }
. ¿Por qué? Porque ShareThis (verifiqué su código JS) llama a esa función y comprueba si la isCollapsed
propiedad está configurada en true
(si es así, detiene el "envenenamiento del portapapeles"). Otros sitios web como ese tal vez no realicen esa verificación, pero terminarán simplemente con un error cuando intenten llamar a una función legítima del Selection
objeto.
Luego, la función se inyecta en el cuerpo / encabezado / documento y se ejecutará automáticamente. Una pregunta que puede hacer es: si Javascript permite anular (casi) todas las funciones, ¿por qué no anuló la addEventListener
función para simplemente no hacer nada cuando el evento es copiar / cortar / pegar? La respuesta es bastante simple. Un script de usuario se ejecuta en un momento no fácilmente predecible, esto significa que el Javascript de ShareThis se puede cargar antes que el script de usuario, y no hará nada. En cambio, simplemente anulando la window.getSelection
función no habrá ningún problema ya que esa función se llama solo cuando se realiza una copia, y estamos 100% seguros de que cuando copie un texto, el script de usuario ya se ha cargado.
Conclusión
La mejor y más limpia solución es obviamente la primera, ya que deshabilita una API prácticamente inútil.
El segundo también es válido, pero perderá cualquiera de las funciones de ShareThis.
El tercero es el más "hacky", pero como último recurso podría funcionar.