美文网首页iOS技术点iOSiOS Developer
iOS WKWebview 禁止长按(超链接、图片、文本...)

iOS WKWebview 禁止长按(超链接、图片、文本...)

作者: 生气龙 | 来源:发表于2017-03-10 18:37 被阅读3554次
    选中样式

    what the ..... 这不是我们要的效果~


    最近公司要命的催进度,大家决定后面采用web,其实我内心是不愿意的,志愿于美方共建Native美好家园

    这些让人看起来渣到爆的网页效果.. 一定要搞掉 对于苹果爸爸的新WKWebview来说UiWebview的解决方案并不完全受用, 在WKWebview头文件翻来翻去 没有找到 可以关闭。不过我在配置信息 WKWebViewConfiguration 的头文件里找到了这个我们可以添加些自己的脚本

    /*! @abstract Adds a user script.
     @param userScript The user script to add.
    */
    - (void)addUserScript:(WKUserScript *)userScript;
    

    我们可以添加些脚本到这个用户配置中,这启发了我

    - (WKWebView *)webView{
        if (!_webView) {
            //创建WKWebview配置对象
            WKWebViewConfiguration*config = [[WKWebViewConfiguration alloc] init];
            config.preferences = [[WKPreferences alloc] init];
            config.preferences.minimumFontSize =10;
            config.preferences.javaScriptEnabled =YES;
            config.preferences.javaScriptCanOpenWindowsAutomatically =NO;
    
            NSMutableString *javascript = [NSMutableString string];
            [javascript appendString:@"document.documentElement.style.webkitTouchCallout='none';"];//禁止长按
            [javascript appendString:@"document.documentElement.style.webkitUserSelect='none';"];//禁止选择
            WKUserScript *noneSelectScript = [[WKUserScript alloc] initWithSource:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
            
            //创建webView
            WKWebView *webView = [[WKWebView alloc]initWithFrame:[UIScreen mainScreen].bounds configuration:config];
            [webView.configuration.userContentController addUserScript:noneSelectScript];
            webView.UIDelegate = self;
            webView.navigationDelegate = self;
            webView.backgroundColor = [UIColor whiteColor];
            webView.scrollView.scrollEnabled = YES;
            [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
            _webView = webView;
    
        }
        return _webView;
    }
    

    也可以直接执行JS , 这样的话要等载入完成后再执行

    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil];
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';"completionHandler:nil];
    }
    

    SO..搞定 刚开心了一小会,把弄了下 长按图片又弹出了这个 还有路径,我去


    超链接弹出的对话框

    搜了半天博客没有解决方案,去stack overflow上碰碰运气,原来苹果会在html中对herf关键字 做优化,即使你href="#" 或 href="void(0)" 都会触发对话框
    所以,两种解决方案
    1 在html标签里 彻底删除href=xx

    2 如果你业务逻辑需要的话,不妨加个标签代替href

    a .originalLink { color: blue; text-decoration: underline; cursor: pointer; }
    <a class="originalLink" onclick="location.href='http://mylink';">Real URL Link</a>
    

    参考文章:
    http://stackoverflow.com/questions/12304012/preventing-default-context-menu-on-longpress-longclick-in-mobile-safari-ipad
    http://blog.csdn.net/shaobo8910/article/details/53485937
    http://www.mamicode.com/info-detail-503121.html

    相关文章

      网友评论

      • MrZombie:没作用啊
      • 布袋的世界:webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none';")

        哈,这句超级好用!谢谢楼主分享
        生气龙:@布袋的世界 祝你Code愉快
      • JanzTam:一句代码搞掂,不用这么复杂
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';"
        生气龙:@JanzTam 我已经介绍过了
      • b34a53458915:非常感谢😃

      本文标题:iOS WKWebview 禁止长按(超链接、图片、文本...)

      本文链接:https://www.haomeiwen.com/subject/uzrogttx.html