Search code examples
iosuiwebviewwebkitios4mobile-webkit

Disabling user selection in UIWebView


I have an app where I load content to a UIWebView and present this. I cannot disable user interaction completely because I want the user to be able to click links. I just need to disable user selection. I found somewhere in the Internets that you can use:

document.body.style.webkitUserSelect='none';

I tried inserting this as

[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"]; 

in webViewDidFinishLoad:

However, it does not work. I am still able to select and copy text inside the WebView.

Any Ideas what might be going wrong?

Update: This only seems to happen starting with iOS 4.3


Solution

  • Here are a few ways to disable selection:

    Add the following to your mobile web documents

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

    Programmatically load the following Javascript code:

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

    Disable the Copy / Paste user menu:

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