对应的程序包: 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)
//
}
}
所有评论(0)