Вопрос по javascript, ios4, css, uiwebview, iphone – Отключите копирование и вставку в UIWebView

3

Почти все, что я пытался отключить копирование / вставку в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

Ваш Ответ

3   ответа
7
-webkit-user-select: none; /* Disable selection/Copy of UIWebView */

Это решение работает для меня на iOS7, но вызывает другие проблемы: как только я добавлю эту строку кода, я не смогу ничего напечатать в моих полях ввода html!
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 */
 }
7

эта тема на S.O какие детали все, что вам нужно сделать ...

Резюме: вам необходимо:

modify your CSS (like you do):

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

adding some javascript:

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

disable the copy/paste menu:

- (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; у вас есть два варианта для этого:

defining a category for UIWebView (if it's ok to remove this behaviour from all of your UIWebViews);

derive your own web view class from UIWebView and override that method in there.

у меня более 7 просмотров, очень сложно переписать их все Mutawe
@sergio Извините, но я считаю, что в вашем коде canPerformAction есть небольшая ошибка. Вы возвращаетесь, если действие включено произвольным образом, и, возможно, веб-представление не поддерживает вставку для текущего контекста. В этом случае появится действие вставки, но фактическое действие завершится сбоем. Я думаю, что лучше сначала вызвать super, а если super разрешает действие, то проверьте свои флаги / условия. Как это помогает = D
@Mutawe Вы должны определить категорию для UIWebView и импортировать ее там, где вы хотите отключить копирование и усиление. операция вставки.
@sergio нет проблем ... ура = D
@omer: спасибо за понимание! Я изменил свой код ...

Похожие вопросы