【问题标题】:Disable copy and paste in UIWebView禁用 UIWebView 中的复制和粘贴
【发布时间】:2012-07-02 16:28:54
【问题描述】:

几乎,我已经尝试了所有方法来禁用 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

【问题讨论】:

    标签: javascript iphone css ios4 uiwebview


    【解决方案1】:
    -webkit-user-select: none; /* Disable selection/Copy of UIWebView */
    

    还将禁用 Mobile Safari 上的表单。

    【讨论】:

    • 这个解决方案在 iOS7 上适用于我,但它会导致其他问题:添加此代码行后,我无法在我的 html 输入字段中输入任何内容!
    【解决方案2】:

    这似乎更复杂......看看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 定义一个类别(如果可以从所有 UIWebView 中删除此行为);

    2. UIWebView 派生您自己的 Web 视图类并在其中覆盖该方法。

    【讨论】:

    • 我有超过 7 个网页浏览量,很难全部重写
    • @Mutawe 您应该为 UIWebView 定义一个类别并将其导入您想要禁用复制和粘贴操作的位置。
    • @sergio 抱歉,但我相信您的 canPerformAction 代码中存在一些小故障。如果以任意方式启用该操作,您将返回,并且 Web 视图可能不支持当前上下文的粘贴。在这种情况下,粘贴动作会出现,但实际动作会崩溃。我认为最好先调用 super ,如果 super 允许该操作,然后检查您的标志/条件。这有什么帮助 =D
    • @sergio 我在这里有类似的问题,但这个解决方案不适合。如果你有时间,请检查一下。谢谢*.com/questions/18258522/…
    【解决方案3】:

    使用这个。

    <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 */
     }
    

    【讨论】: