(HTML/AJUDA) Desbloquear seleção de texto apenas em um post?

Olá, tenho um blog em que por questões de direito autoral eu bloqueio seleção de textos e botão direito do mouse no <body> geral do layout, ele está assim <body oncontextmenu='return false' ondragstart='return false' onkeydown='return validateKey(event)' onselectstart='return false'>. Porém eu gostaria de saber se existe algum código html simples e fácil que eu possa inserir em UMA postagem apenas do meu blog, não no código geral do layout, para que essa única postagem esteja liberado a SELEÇÃO de texto para cópia. Pois nesse único post eu necessito que possam copiar determinado conteúdo fornecido. É possível? Se sim me informem de um jeito claro e fácil pfvr.

1 curtida

Boa noite @profcarvalho, tudo bem?!

Sim, é possível!
Umas das maneiras de fazer é usando JQuery, especificamente com um seletor e JQuery.

1° - Seletor no HTML (pode ser class ou id).
Suponha que o senhor queira copiar o texto dois que está dentro de uma de <div>text dois</div>, além disso o senhor também deseja que apenas o conteúdo dentro dessa tag seja copiado, ou seja, o conteúdo de outras <div>'s não podem de modo algum serem copiados, o que e como fazer?! O primeiro passo é identificar esta <div> com um seletor, seja com um id ou class. Neste exemplo eu vou usar a class copy para identificar a <div> do texto dois.

[...]
<body oncontextmenu='return false' ondragstart='return false' onkeydown='return validateKey(event)' onselectstart='return false'>

<div>texto um</div>
<div class="copy">text dois</div>

</body>  
[...]

2° - JQuery.
Tendo a <div> já identificada, agora fica fácil, é só usar JQuery, ou JavaScript puro, neste caso eu vou usar JQuery. A função abaixo faz isso, eu só preciso informar o seletor, que neste exemplo é .copy.

$('.copy').click(function(){
     var texto = $(this).text();		
     var elemento = document.createElement('textarea');
		
     elemento.value = texto;
     document.body.appendChild(elemento);
		
     elemento.select();
     document.execCommand('copy');
     document.body.removeChild(elemento);			
});

Pronto, agora é possível copiar apenas o texto dois da <div class="copy">. Eu estou encaminhado para o senhor um exemplo, onde o senhor pode ver uma pequena demonstração, segue em anexo: site.zip (1,9 KB)

Referências:
Copiar texto ao clicar numa DIV [duplicada]
JavaScript Copy to Clipboard
Copying strings to the clipboard using pure Javascript

OBS.: Uma curiosidade, qual é o nome e endereço do seu blog? Eu gostaria de visita-lo.

Abraços!

1 curtida

Não importa o que fizer, quem tiver a intenção de copiar vai copiar. Uma das formas é salvando em arquivo ou imprimindo em pdf.

Não teria que se preocupar se já estão cobertos por direitos autorais.

Bem, isso é verdade @javaflex!

Mas acho que a intenção dele é de pelo menos reduzir as cópias!

1 curtida

Muito bom Tuna, você é muito inteligente! Eu hospedei esse código que vc me passou em anexo em .js, coloquei o js hospedado dentro do meu layout e funcionou perfeitamente. Só que eu acho muito complexo para o visitante isso de clicar e já ter copiado sozinho, pois alguns nem saberão que só em clicar em cima do texto automaticamente irá copiar. Eu gostaria desse mesmo código só que bem simples, sem essa aparição de fundo quando clica e sem esse efeito de clicar e copiar sozinho. Queria apenas liberar a área que eu colocar o <div class="copy">conteudo</div> e a própria pessoa selecionar o texto e copia-lo. É possível dessa forma mais tradicional? ou não?

Ou então se eu for deixar dessa forma mesmo que vc me passou copiando automático quando clica em cima, é possível mostrar então uma mensagem dizendo “conteúdo copiado”? Mas ainda preferia sem esse efeito de copiar automático ao clique.

Muito obrigado, professor!

Então, como o senhor setou aquela configuração no <body>, creio que todos os filhos herdaram essa configuração também. Confesso que não conheço uma maneira de desativar um elemento específico.

Mas quanto a esse pulo do gato, copiar com um clique, o senhor pode suavizar isso e deixar mais intuitivo, por exemplo colocando um ícone, disparando uma mensagem ao copiar, efeitos de hover e etc.

Esse ícone seria interessante!
download

Eu vou pesquisar a respeito, procurar uma maneira de suavizar, caso eu encontre, lhe aviso.

Abraços!

1 curtida

Entendi. E existe algum código que eu possa fazer o oposto? bloquear a seleção de texto no post específico que eu colocar o código? Porque aí eu poderia retirar o onselectstart=‘return false’ do body do layout e aplicar esse possível código de bloqueio somente nos posts que eu queira bloquear seleção de textos.

Já solucionei!
Retirei o <onselectstart do body do layout e vou adicionar esse seguinte código em todo conteúdo que eu não quiser seleção de texto liberada. Sei que é possível burlar esse bloqueio de seleção, mas é bom dificultar mais ainda.

<script type="text/javascript">function disableselect(e){return 
false;} document.onselectstart=new Function ("return false"); if (window.sidebar){document.onmousedown=disableselect; 
document.onclick=reEnable;}</script>

Obrigado pela atenção Tuna!

1 curtida

Pergunta certa na hora certa :clap::clap:

E aí @profcarvalho, tudo bem?!

Como combinado, achei uma maneira estilizada de fazer o que o senhor deseja, se o senhor for disponibilizar apenas trechos de códigos, eu acho essa é uma maneira ideal. Estou mandando o arquivo em anexo.

Material em anexo: site_copy.zip (4,3 KB)

OBS.: Uma curiosidade, qual é o nome e endereço do seu blog? Eu gostaria de visita-lo.

Abraços!

Só o seu código me ajudou no meu problema, eu tava buscando uma maneira de desbloquear o meu formulário, e olhei sua pergunta, li, vi o código (oncontextmenu=‘return false’ ondragstart=‘return false’ onkeydown=‘return validateKey(event)’ onselectstart=‘return false’) e me ajudou, eu tava colocando só o "oncontextmenu=‘return false’ no body, obrigado.