J'ai une application dans laquelle je charge du contenu UIWebView
et le présente. Je ne peux pas désactiver complètement l'interaction de l'utilisateur car je souhaite que l'utilisateur puisse cliquer sur des liens. J'ai juste besoin de désactiver la sélection des utilisateurs. J'ai trouvé quelque part dans les internets que vous pouvez utiliser:
document.body.style.webkitUserSelect='none';
J'ai essayé d'insérer ceci comme
[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
dans webViewDidFinishLoad:
Cependant, cela ne fonctionne pas. Je suis toujours en mesure de sélectionner et de copier du texte dans WebView.
Des idées sur ce qui pourrait mal tourner?
Mise à jour: cela ne semble se produire qu'à partir d'iOS 4.3
UIWebView
aide d'une catégorie.canPerformAction
ne désactive pas le menu Couper, Copier, Coller. Et sélectionnez, sélectionnez tout le menu. Comment régler ceci?-webkit-touch-callout
etremoveAllRanges
interrompre l'entrée de l'utilisateur. Impossible d'utiliser toutes les méthodes fournies :(*
une portée globale est que cela arrête la saisie de l'utilisateur dans les formulaires Web. J'ai trouvé que j'avais de meilleurs résultats en plaçantbody
plutôt à l'intérieur de l' étiquette.Je peux confirmer que le code suivant fonctionne dans iOS 5.0 - 8.0.
Fonctionne également pour iOS 9 et versions ultérieures. Voici le code SWIFT:
la source
J'utilise cette technique dans une application Web pour Android / iPhone (fournie avec Trigger.IO) et j'ai trouvé qu'elle ne fonctionnerait qu'avec la syntaxe de chaînage pour la pseudo-classe: not (),:
la source
*:not(input,textarea) {-webkit-touch-callout: none; -webkit-user-select: none;}
mais cela n'a pas fonctionné pour moi. Merci!J'aime la solution WrightsCS mais je vais l'utiliser pour que les utilisateurs puissent toujours utiliser les actions copier, coller et sélectionner sur les entrées
la source
Je ne sais pas comment la configuration est effectuée, mais pourquoi ne pas effacer le pasteBoard lorsque viewWillDisappear est appelé. Peut-être quelque chose comme dans votre appDelegate.m:
cela garantira que toutes les données que l'utilisateur aura copiées, il ne pourra pas les coller en dehors de l'application.
De plus, comme Engin l'a dit, vous pouvez remplacer la méthode canPerformSelector dans la classe de contrôleur qui contient uiwebview.
la source
La réponse de TPoschel est correcte mais dans mon cas, l'ordre était important.
la source
Je peux confirmer que cela fonctionnera certainement pour vous.
Si vous souhaitez désactiver uniquement la balise de bouton d'ancrage, utilisez-la.
la source
Résultat de l'excellent travail d'une semaine! Toutes les autres réponses sont incorrectes si vous souhaitez enregistrer les événements de souris et les entrées utilisateur sur de nombreuses pages.
1) Méthode Swizzle (par la bibliothèque rentzsch / jrswizzle ):
NSObject + myCanPerformAction.h:
NSObject + myCanPerformAction.m:
2) Placez UIWebView sur UIView et ajoutez un code:
Et celui-là:
la source
Ajoutez simplement ce code à votre viewDidLoad (). L'utilisateur peut cliquer sur le lien mais ne peut pas copier le contenu.
la source
La première solution donnée fonctionnait parfaitement pour moi ... jusqu'à ce que je charge un .pdf dans mon UIWebView.
Le chargement d'un fichier .doc fonctionnait parfaitement, mais le chargement d'un .pdf faisait que la ligne de code suivante n'avait plus l'effet souhaité et le menu copier / définir réapparaissait après une longue pression de la part de l'utilisateur.
Après un autre coup de cheveux, j'ai trouvé cette réponse ici par Johnny Rockex et cela a fonctionné comme un champion. UIWebView sans copier / coller lors de l'affichage de fichiers PDF
Un grand merci à lui pour cette solution géniale facile à mettre en œuvre !!
la source
Pour moi, j'ai eu l'intention de récupérer les images
NSData
deUIWebView
parLongPressGesture
.Mais la loupe et le copier / coller / couper se produisent toujours avant l'exécution de ma fonction.
Et j'ai trouvé ceci:
Cela signifie que la Loupe et le Copier / Coller / Couper ont besoin de 0,5 s pour s'exécuter, donc si votre func peut être exécutée en 0,49 s, FAIT!
la source
Utiliser la fonction d'interection de vue Web
Ça marche pour moi
PS: n'oubliez pas de réactiver l'interaction lorsque vous souhaitez que l'utilisateur puisse à nouveau interagir avec la vue Web
la source