Eu tenho um aplicativo no qual carrego conteúdo UIWebView
e apresento isso. Não consigo desativar completamente a interação do usuário porque quero que o usuário possa clicar nos links. Eu só preciso desativar a seleção de usuários. Encontrei em algum lugar do Internets que você pode usar:
document.body.style.webkitUserSelect='none';
Eu tentei inserir isso como
[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
no webViewDidFinishLoad:
No entanto, isso não funciona. Ainda consigo selecionar e copiar texto dentro do WebView.
Alguma idéia do que pode estar errado?
Atualização: isso parece acontecer apenas a partir do iOS 4.3
UIWebView
usando uma categoria.canPerformAction
não desativa o menu Recortar, Copiar, Colar. E selecione, selecione o menu Todos. Como consertar isto?-webkit-touch-callout
eremoveAllRanges
interrompa a entrada do usuário. Não é possível usar todos os métodos fornecidos :(*
escopo global é que ele interrompe a entrada do usuário em formulários da web. Descobri que obtive melhores resultados colocando dentro dabody
tag.Posso confirmar que o código a seguir funciona no iOS 5.0 - 8.0.
Também funciona para iOS 9 e posterior. Aqui está o código rápido:
fonte
Estou usando essa técnica em um aplicativo Web para Android / iPhone (fornecido com o Trigger.IO) e achei que funcionaria apenas com a sintaxe de encadeamento da pseudo-classe: not ():
fonte
*:not(input,textarea) {-webkit-touch-callout: none; -webkit-user-select: none;}
mas isso não funcionou para mim. Obrigado!Gosto da solução WrightsCS, mas usarei isso para que os usuários ainda possam usar a copiar, colar e selecionar ações nas entradas
fonte
Não tenho certeza de como a configuração é feita, mas por que você não limpa o pasteBoard quando o viewWillDisappear é chamado. Talvez algo como no seu appDelegate.m:
isso garantirá que quaisquer dados que o usuário possa ter copiado, não poderão colá-lo fora do aplicativo.
Além disso, como Engin disse, você pode substituir o método canPerformSelector na classe do controlador que contém o uiwebview.
fonte
A resposta TPoschel é correta, mas no meu caso a ordem foi importante.
fonte
Posso confirmar que isso definitivamente funcionará para você.
Se você deseja Desativar apenas a tag do botão de ancoragem, use isso.
fonte
Resultado do excelente trabalho por uma semana! Todas as outras respostas estão incorretas se você deseja salvar eventos do mouse e entrada do usuário em várias páginas.
1) Método Swizzle (pela biblioteca rentzsch / jrswizzle ):
NSObject + myCanPerformAction.h:
NSObject + myCanPerformAction.m:
2) Coloque o UIWebView no UIView e adicione um código:
E este:
fonte
Basta adicionar esse código ao seu viewDidLoad (). O usuário pode clicar no link, mas não pode copiar o conteúdo.
fonte
A primeira solução fornecida funcionou perfeitamente para mim ... até eu carregar um .pdf no meu UIWebView.
O carregamento de um arquivo .doc funcionou perfeitamente, mas o carregamento de um .pdf fez com que a seguinte linha de código não tivesse mais o efeito desejado e o menu copiar / definir apareceu novamente com um longo toque do usuário.
Depois de mais um puxão de cabelo, encontrei esta resposta aqui por Johnny Rockex e funcionou como um campeão. UIWebView sem copiar / colar ao exibir arquivos PDF
Muito obrigado a ele por esta fácil de implementar, solução genial !!
fonte
Para mim, tenho a intenção de buscar as imagens
NSData
deUIWebView
peloLongPressGesture
.Mas a Lupa e Copiar / Colar / Cortar sempre ocorrem antes da execução da minha função.
E eu achei isso:
Isso significa que a Lupa e Copiar / Colar / Cortar precisam de 0,5s para serem executadas, portanto, se sua função puder ser executada em 0,49s, CONCLUÍDO!
fonte
Use a função de intereção de exibição na web
Funciona para mim
PS: lembre-se de ativar a interação quando quiser que o usuário possa interagir com a visualização na web novamente
fonte