Как отключить копирование и вставку в UIWebView - PullRequest
8 голосов
/ 13 июля 2011

Когда пользователь долго нажимает внутри UIWebView, появляется всплывающее окно «Копировать и вставить».Можно ли отключить систему от всплывающего окна функции «Копировать и вставить», но при этом позволить пользователю нажимать на ссылки и переходить на новые страницы?

Ответы [ 6 ]

4 голосов
/ 24 июня 2015

Я надеюсь, что эта работа для вас, потому что это работа для меня

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"];
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
}
4 голосов
/ 02 июля 2012

Попробуйте это

[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none'; document.body.style.KhtmlUserSelect='none'"];
3 голосов
/ 08 июня 2012

Для тех, кто может работать на уровне HTML, решение JavaScript - это лучший способ (извлеките часть JavaScript здесь [1]).

Для разработчиков, которые не могут изменять HTML-страницы, решение [1] будет работать для 99% клиентов и действительно чисто и безопасно.

Однако для случаев, когда всплывающее окно, которое появляется, когда вы долго нажимаете на ссылку или копируете и вставляете или увеличительное стекло и т. Д., Просто должно никогда , тогда вот оно, мое рабочее решение. (случаи, когда JavaScript-инъекция завершается неудачно, это случаи, когда страницы загружаются немного, а пользователь тем временем нажимает на ссылку).

Чтобы решить эту проблему, просто вставьте эту реализацию протокола практически в любое место вашего кода (не ленитесь ... создайте новый файл категории). Пожалуйста, имейте в виду, что это решение опасно, по крайней мере теоретически, в реальной жизни (то есть с iOS 6.0.2), оно не опасно. Пожалуйста, знайте, к каким категориям относится данное решение.

@implementation UIScrollView (CustomGestureCollisionHandling)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    for(UIView *aView in gestureRecognizer.view.subviews)
    {
        for (UIGestureRecognizer *gestRec in aView.gestureRecognizers) 
        {
            if (!gestRec.enabled) 
            {
                continue;
            }

            if ([[NSString stringWithFormat:@"%@",[gestRec class]] isEqualToString:@"UITapAndAHalfRecognizer"]) 
            {
                gestRec.enabled = NO;
            }
        }
    }

    if ([otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
    {
        otherGestureRecognizer.enabled = NO;
    }

    return NO;

}

@end

[1] https://stackoverflow.com/a/5548362/428143

1 голос
/ 13 июля 2011

Вы можете попробовать добавить javascript в webView.Этот код работает на iPhone тоже, но только когда страница полностью загружена.http://javascript.internet.com/page-details/disable-text-selection.html или http://solidlystated.com/scripting/proper-way-to-disable-text-selection-and-highlighting/

Для правильной работы, когда страница загружена только наполовину или все еще загружается, вам, вероятно, придется использовать настройку, аналогичную той, в которой вы вводите отключениеJavascript так же, как он начал бы выбирать.http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/

UIWebView без копирования / вставки и выделения прямоугольника при отображении документов

0 голосов
/ 04 апреля 2014

Протестировано в iOS 5,6,7:

Скрыть все контекстное меню с помощью:

[[UIMenuController sharedMenuController] setMenuVisible: NO];

для события UIMenuControllerWillShowMenuNotification

Пример

Обратите внимание, что селектор снова срабатывает после задержки. В этом примере они используют 0,15 с. Я использовал .001. Это лучше предотвращает появление или, по крайней мере, сокращает время, когда меню видно / доступно.

0 голосов
/ 17 октября 2012
- (void)webViewDidFinishLoad:(UIWebView *)webView {
 [iWebView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';  document.body.style.KhtmlUserSelect='none'"];
}
...