O site que adiciona as coisas irritantes "Leia mais" é o ShareThis.
Para evitar esse mau comportamento, você tem três alternativas diferentes:
Desativar os eventos da área de transferência
Esses sites estão usando as APIs da área de transferência , que permitem aos desenvolvedores da Web interceptar as ações de copiar / recortar / colar e executar algum código quando são executadas. É assim que o ShareThis (e outros sites como esse) funciona. Ele simplesmente aguarda o evento de cópia e, imediatamente antes da cópia efetiva, ele adiciona uma "camada" adicional de texto que contém o irritante "- Veja ...".
Agora, a pergunta é: existe algum tipo de método para desativar os eventos da área de transferência? Infelizmente, não consegui encontrar um método para fazer isso no Chrome / Chromium, mas no Firefox é possível de duas maneiras diferentes.
- Entre
about:config
e procure dom.event.clipboardevents.enabled
. Clique duas vezes na chave (defina-a false
) e pronto! Você desativou os eventos da área de transferência e ninguém tocará na sua área de transferência novamente.
- Para versões mais antigas do Firefox (muito, muito mais antigas), existe esta extensão que faz exatamente a mesma coisa da
about:config
opção.
Desativar eventos da área de transferência não deve prejudicar a experiência de qualquer site, uma vez que raramente são usados e não existe realmente um objetivo para usá-los (exceto spam).
Vamos para a segunda solução.
Bloquear ShareThis
Se você não precisa do ShareThis, pode simplesmente bloquear o w.sharethis.com
domínio. O Javascript responsável por carregar o ShareThis (e registrar o ClipboardEvent
) é carregado nesse site.
Você pode bloqueá-lo de diferentes maneiras, desde um simples filtro do AdBlock até a edição do arquivo hosts (isso não é coberto nem vinculado aqui, pois não posso colocar mais links devido à minha reputação).
Um exemplo de fazer isso através do hosts
arquivo:
127.0.0.1 w.sharethis.com
A terceira solução é a mais difícil e deve ser usada apenas como último recurso.
Desativar o recurso de seleção nos sites problemáticos
Para editar o conteúdo que é copiado para a área de transferência, esses sites usam a Selection
API, que permite editar as seleções rapidamente. Portanto, uma solução é desativar completamente qualquer tipo de Selection
(no lado do código, obviamente. Você ainda poderá executar seleções).
Isso pode ser feito com um script simples Tampermonkey / Greasemonkey. Testei-o apenas no Firefox, pois não consigo instalar o Chrome no momento. Eu sinto por isso.
Este é o código fonte:
// ==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 deixar isso funcionar, você deve criar um novo script Greasemonkey / Tampermonkey e ajustar as @include
diretivas. Você pode colocar um site por linha, e isso deve ser feito como @include http://bad.website.address/
.
Eu testei com os dois sites que você vinculou e funciona sem problemas. No entanto, lembre-se de que isso pode causar problemas, já que Selection
s são usados por sites perfeitamente legítimos (por exemplo, as caixas de texto StackExchange as utilizam para inserir um símbolo, quando você clica no botão, na posição do cursor), portanto, habilite que userscript apenas em sites problemáticos.
(observe que pode ser necessário remover as linhas iniciadas com, //
se você estiver criando o script do usuário nos menus Greasemonkey / Tampermonkey, eles o adicionarão automaticamente)
A explicação do script do usuário é bem simples. Primeiro, define uma função nomeada disableSelections
que substitui o padrão document.getSelection
e window.getSelection
funciona por uma que simplesmente retorna um objeto que contém { isCollapsed: true }
. Por quê? Como o ShareThis (verifiquei o código JS) chama essa função e verifica se a isCollapsed
propriedade está definida como true
(se estiver, interrompe o "envenenamento da área de transferência"). Outros sites como esse talvez não realizem essa verificação, mas eles acabam simplesmente com um erro quando tentam chamar uma função legítima do Selection
objeto.
Em seguida, a função é injetada no corpo / cabeçalho / documento e será executada automaticamente. Uma pergunta que você pode fazer é: se o Javascript permite substituir (quase) todas as funções, por que você não substituiu a addEventListener
função para simplesmente não fazer nada quando o evento é copiar / recortar / colar? A resposta é muito simples. Um script de usuário é executado em um horário não facilmente previsível, isso significa que o Javascript ShareThis pode ser carregado antes do script de usuário e não fará nada. Em vez disso, substituindo apenas a window.getSelection
função, não haverá nenhum problema, pois essa função é chamada apenas quando uma cópia é executada e temos 100% de certeza de que, quando você copia um texto, o script do usuário já foi carregado.
Conclusão
A melhor e mais limpa solução é obviamente a primeira, pois desativa uma API praticamente inútil.
O segundo também é válido, mas você perderá qualquer funcionalidade do ShareThis.
O terceiro é o mais "hacky", mas como último recurso, ele pode funcionar.