Ich habe eine App, in die ich Inhalte lade UIWebView
und diese präsentiere. Ich kann die Benutzerinteraktion nicht vollständig deaktivieren, da der Benutzer auf Links klicken kann. Ich muss nur die Benutzerauswahl deaktivieren. Ich habe irgendwo im Internet gefunden, dass Sie verwenden können:
document.body.style.webkitUserSelect='none';
Ich habe versucht, dies als einzufügen
[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
im webViewDidFinishLoad:
Es funktioniert jedoch nicht. Ich kann weiterhin Text in WebView auswählen und kopieren.
Irgendwelche Ideen, was schief gehen könnte?
Update: Dies scheint nur ab iOS 4.3 zu geschehen
UIWebView
eine Kategorie verwenden.canPerformAction
deaktiviert das Menü Ausschneiden, Kopieren, Einfügen nicht. Und Wählen Sie, Wählen Sie Alle. Wie kann ich das beheben?-webkit-touch-callout
undremoveAllRanges
Benutzereingaben unterbrechen. Kann nicht alle bereitgestellten Methoden verwenden :(*
globalen Bereich besteht darin, dass Benutzereingaben in Webformularen gestoppt werden. Ich habe festgestellt, dass ich bessere Ergebnisse erzielt habe, indem ichbody
stattdessen das Tag platziert habe.Ich kann bestätigen, dass der folgende Code in iOS 5.0 - 8.0 funktioniert.
Funktioniert auch für iOS 9 und höher. Hier ist der schnelle Code:
quelle
Ich verwende diese Technik in einer Web-App für Android / iPhone (im Lieferumfang von Trigger.IO enthalten) und habe festgestellt, dass sie nur mit der Verkettungssyntax für die Pseudoklasse: not () funktioniert:
quelle
*:not(input,textarea) {-webkit-touch-callout: none; -webkit-user-select: none;}
aber das hat mir nicht geholfen. Vielen Dank!Ich mag die WrightsCS-Lösung, aber ich werde sie verwenden, damit die Benutzer weiterhin die Aktionen zum Kopieren, Einfügen und Auswählen von Eingaben verwenden können
quelle
Ich bin nicht sicher, wie das Setup durchgeführt wird, aber warum löschen Sie nicht einfach das pasteBoard, wenn viewWillDisappear aufgerufen wird. Vielleicht so etwas wie in deiner appDelegate.m:
Dadurch wird sichergestellt, dass Daten, die der Benutzer möglicherweise kopiert hat, nicht außerhalb der App eingefügt werden können.
Wie Engin sagte, können Sie auch die canPerformSelector-Methode in der Controller-Klasse überschreiben, die die uiwebview enthält.
quelle
Die Antwort von TPoschel ist korrekt, aber in meinem Fall war die Reihenfolge wichtig.
quelle
Ich kann bestätigen, dass dies definitiv für Sie funktionieren wird.
Wenn Sie nur das Ankertasten-Tag deaktivieren möchten, verwenden Sie dieses.
quelle
Ergebnis der großartigen Arbeit für eine Woche! Alle anderen Antworten sind falsch, wenn Sie Mausereignisse und Benutzereingaben auf vielen Seiten speichern möchten.
1) Swizzle-Methode (von rentzsch / jrswizzle library):
NSObject + myCanPerformAction.h:
NSObject + myCanPerformAction.m:
2) Platzieren Sie UIWebView in UIView und fügen Sie einen Code hinzu:
Und das hier:
quelle
Fügen Sie diesen Code einfach zu viewDidLoad () hinzu. Der Benutzer kann auf den Link klicken, den Inhalt jedoch nicht kopieren.
quelle
Die erste Lösung funktionierte perfekt für mich ... bis ich eine PDF-Datei in meine UIWebView geladen habe.
Das Laden einer DOC-Datei funktionierte einwandfrei, aber das Laden einer PDF-Datei führte dazu, dass die folgende Codezeile nicht mehr den gewünschten Effekt hatte und das Menü zum Kopieren / Definieren bei einer langen Berührung durch den Benutzer erneut angezeigt wurde.
Nach einer weiteren Haarsträhne fand ich diese Antwort hier von Johnny Rockex und sie funktionierte wie ein Champion. UIWebView ohne Kopieren / Einfügen beim Anzeigen von PDF-Dateien
Vielen Dank an ihn für diese einfach zu implementierende, geniale Lösung !!
quelle
Für mich habe ich vorgehabt, die Bilder
NSData
vonUIWebView
by zu holenLongPressGesture
.Aber die Lupe und das Kopieren / Einfügen / Ausschneiden erfolgen immer, bevor meine Funktion ausgeführt wird.
Und ich fand das:
Dies bedeutet, dass die Lupe und das Kopieren / Einfügen / Ausschneiden 0,5 Sekunden benötigen, um ausgeführt zu werden. Wenn Ihre Funktion also in 0,49 Sekunden ausgeführt werden kann, FERTIG!
quelle
Verwenden Sie die Web View Interection-Funktion
Für mich geht das
PS: Denken Sie daran, die Interaktion wieder zu aktivieren, wenn der Benutzer wieder mit der Webansicht interagieren kann
quelle