2012-07-02 2 views
3

Почти, я пробовал все, чтобы отключить копирование/вставку в UIWebView, но ничего не работало со мной.Отключить копировать и вставлять в UIWebView нераскрытый

им загрузка мой UIWebView из строки (массив строк) следующим образом:

[webView loadHTMLString: 
[NSString stringWithFormat:@"%@<p class=\"paragraph\" style=\"float: right\" >%@</p>",css,[[array objectAtIndex:0] valueForKey:@"content"]] baseURL:nil ]; 

я пытался это:

-(void)webViewDidFinishLoad:(UIWebView *)webView1{ 
[webView1 stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"]; 
} 

и это:

NSString *css = 
@"<head><style><body> *{-webkit-touch-callout: none; -webkit-user-select: none;}</style> </head> </body> "; 

, но ничего работал со мной специально для iOS 4.2 любые идеи ???

ответ

7
-webkit-user-select: none; /* Disable selection/Copy of UIWebView */ 

также отключает форма на Mobile Safari.

+0

Это решение работает для меня на iOS7, но это вызывает другие проблемы: как только я добавлю эту строку кода, t введите что-нибудь в поля ввода html! – AmineG

7

Кажется, он более сложен, что, что ... посмотреть на this thread on S.O, который подробно все, что вам нужно сделать ...

Резюме: вам нужно:

изменить свой CSS (например, вы делаете):

<style type="text/css"> 
* { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; /* Disable selection/Copy of UIWebView */ 
} 
</style> 

добавить некоторые JavaScript:

NSString * jsCallBack = @"window.getSelection().removeAllRanges();";  
[webView stringByEvaluatingJavaScriptFromString:jsCallBack]; 

отключить меню копирования/вставки:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    BOOL superCanPerform = [super canPerformAction:action withSender:sender]; 
    if (superCanPerform) { 
    if (action == @selector(copy:) || 
     action == @selector(paste:)|| 
     action == @selector(cut:)) 
    { 
     return _copyCutAndPasteEnabled; 
    } 
    } 
    return superCanPerform; 
} 

canPerformAction должны быть определены в вашем UIWebView; у вас есть два варианта, что:

  1. задающих категорию UIWebView (если это нормально, чтобы удалить поведение из всех вашего UIWebViews);

  2. получить свой собственный веб-класс класса от UIWebView и переопределить этот метод там.

+0

я больше чем 7 веб-представления, его очень трудно переписать все – Mutawe

+0

@Mutawe Вы должны определить категорию для UIWebView и импортировать его там, где вы хотите, чтобы отключить копировать и вставлять операции. –

+1

@sergio Извините, но я считаю, что в вашем коде canPerformAction есть небольшой глюк. Вы возвращаетесь, если действие разрешено произвольным образом, и, возможно, веб-представление не поддерживает вставку для текущего контекста. В этом случае действие пасты появится, но произойдет фактическое действие. Я думаю, что лучше сначала назвать супер, а если супер разрешает действие, то проверьте свои флаги/условия. Как это помогает = D – Omer

0

Используйте это.

<style type="text/css"> 
*:not(input):not(textarea) { 
-webkit-user-select: none; /* disable selection/Copy of UIWebView */ 
-webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */ 
}  
</style> 
If you want Disable only anchor button tag use this. 

a {-webkit-user-select: none; /* disable selection/Copy of UIWebView */ 
    -webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */ 
} 
Смежные вопросы