swift -> WKWebview 长按 获取 html 标签

参考 : https://github.com/mozilla-mobile/firefox-ios/pull/61/commits/5db1beac48703c649edc314ee6b4c19540b40114?diff=unified

对应的程序包:  https://github.com/mozilla-mobile/firefox-ios/archive/AuroraV1.zip 

替换 系统本身的  长按超链接或图片等事件

//增加 UIGestureRecognizerDelegate 代理 因为要给 view 添加 长按事件
class ViewController:AAAA,UIGestureRecognizerDelegate{
    
    //让 添加 的 长按事件 与 webView 的长按事件 并存,不添加不会触发 addGestureRecognizer 的长按
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true;
    }
    
    //避免 绑定的长按事件  触发webView 里的超链接 被触发
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true;
    }
    
    //长按后触发的方法
    //原理是, 获取长按坐标 对应的 html 标签  ,然后 获取这个html标签的完整html代码
    func longPressWeb(sender:UILongPressGestureRecognizer){
        if(sender.state != .began){return;}
        let touchPoint = sender.location(in: webList[webCrt]);
        var htmlStr:NSString = NSString.init(format: "document.elementFromPoint(%f,%f).outerHTML", touchPoint.x,touchPoint.y)
        print("htmlStr:"+(htmlStr as String))
        self.webList[webCrt].evaluateJavaScript(htmlStr as String, completionHandler: { (result, error) in
            if result != nil {
                print("yes has");
                print(result);
            } else {
                print("no hasnot");
                //self.webDoSome.logoBigSave(img_src: "", host: (self.webList[webCrt].url?.host)!);
            }
        })
    }
    //\\
    override func viewDidLoad() {
        //添加自定义长按事件 , 这里是添加给了 WKWebView 的父级,也可以直接添加给self.view
        let long = UILongPressGestureRecognizer(target: self, action: #selector(longPressWeb));
        long.delegate = self
        webBox.addGestureRecognizer(long)
        //
    }
    
    
    //在webView 加载完后 注入JS 方法 屏蔽 系统的长按方法
    //建议在 webView 加载的过程中也 注入该 JS 方法, 避免在未加载完时也可调用系统的长按
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        
        
        //屏蔽用户选择文字
        //webList[webCrt].evaluateJavaScript("document.body.style.webkitUserSelect='none';", completionHandler: nil)
        //屏蔽长按
        webList[webCrt].evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)
        //
        
    }
    
    
    
}

相关推荐