Mam aplikację, w której ładuję zawartość do pliku UIWebView
i przedstawiam to. Nie mogę całkowicie wyłączyć interakcji użytkownika, ponieważ chcę, aby użytkownik mógł klikać linki. Muszę tylko wyłączyć wybór użytkownika. Znalazłem gdzieś w Internetach, z których możesz skorzystać:
document.body.style.webkitUserSelect='none';
Próbowałem wstawić to jako
[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
w webViewDidFinishLoad:
Jednak to nie działa. Nadal mogę zaznaczać i kopiować tekst w WebView.
Jakieś pomysły, co może się nie udać?
Aktualizacja: wydaje się, że dzieje się tak dopiero od iOS 4.3
UIWebView
za pomocą kategorii.canPerformAction
nie wyłącza menu Wytnij, Kopiuj, Wklej. I wybierz menu Wybierz wszystko. Jak to naprawić?-webkit-touch-callout
iremoveAllRanges
przerwij wprowadzanie danych przez użytkownika. Nie można użyć wszystkich podanych metod :(*
zakresie globalnym polega na tym, że zatrzymuje wprowadzanie danych przez użytkownika w formularzach internetowych. Okazało się, że uzyskałem lepsze wyniki, umieszczającbody
zamiast tego tag.Mogę potwierdzić, że poniższy kod działa w iOS 5.0 - 8.0.
Działa również na iOS 9 i nowszych. Oto szybki kod:
źródło
Używam tej techniki w aplikacji internetowej na Androida / iPhone'a (w pakiecie z Trigger.IO) i stwierdziłem, że będzie działać tylko ze składnią łańcuchową dla pseudoklasy: not (),:
źródło
*:not(input,textarea) {-webkit-touch-callout: none; -webkit-user-select: none;}
ale to nie pomogło. Dzięki!Podoba mi się rozwiązanie WrightsCS, ale użyję go, aby użytkownicy mogli nadal używać kopiowania, wklejania i wybierania działań na wejściach
źródło
Nie jestem pewien, jak wygląda konfiguracja, ale dlaczego po prostu nie wyczyścisz pasteBoard, gdy wywoływana jest funkcja viewWillDisappear. Może coś takiego w twojej appDelegate.m:
Dzięki temu wszelkie dane, które użytkownik mógł skopiować, nie będą w stanie wkleić ich poza aplikacją.
Ponadto, jak powiedział Engin, można przesłonić metodę canPerformSelector w klasie kontrolera, która zawiera uiwebview.
źródło
Odpowiedź TPoschela jest poprawna, ale w moim przypadku kolejność była ważna.
źródło
Mogę potwierdzić, że to na pewno zadziała.
Jeśli chcesz wyłączyć tylko znacznik przycisku kotwicy, użyj tego.
źródło
Efekt wspaniałej pracy przez tydzień! Wszystkie inne odpowiedzi są niepoprawne, jeśli chcesz zapisać zdarzenia myszy i dane wejściowe użytkownika na wielu stronach.
1) Metoda Swizzle (według biblioteki rentzsch / jrswizzle ):
NSObject + myCanPerformAction.h:
NSObject + myCanPerformAction.m:
2) Umieść UIWebView na UIView i dodaj kod:
I ten:
źródło
Po prostu dodaj ten kod do swojej viewDidLoad (). Użytkownik może kliknąć link, ale nie może skopiować treści.
źródło
Pierwsze podane rozwiązanie działało idealnie dla mnie ... dopóki nie załadowałem pliku .pdf do mojego UIWebView.
Ładowanie pliku .doc działało idealnie, ale ładowanie pliku .pdf spowodowało, że następująca linia kodu nie miała już pożądanego efektu, a menu kopiowania / definiowania pojawiło się ponownie po długim dotknięciu przez użytkownika.
Po kolejnym wyrywaniu włosów znalazłem tutaj odpowiedź Johnny'ego Rockexa i zadziałała jak mistrz. UIWebView bez kopiowania / wklejania podczas wyświetlania plików PDF
Wielkie dzięki za to łatwe do wdrożenia, genialne rozwiązanie !!
źródło
Dla mnie, mam przeznaczone do pobierania obrazów
NSData
zUIWebView
przezLongPressGesture
.Ale Lupa i Kopiuj / Wklej / Wytnij zawsze pojawiają się przed wykonaniem mojej funkcji.
I znalazłem to:
Oznacza to, że Lupa i Kopiuj / Wklej / Wytnij potrzebują 0,5 s do wykonania, więc jeśli twoja funkcja może być wykonana w 0,49 s, GOTOWE!
źródło
Użyj funkcji interection widoku internetowego
Mi to pasuje
PS: pamiętaj, aby włączyć interakcję z powrotem, gdy chcesz, aby użytkownik mógł ponownie wejść w interakcję z przeglądarką internetową
źródło