`

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

 

分享到:
评论

相关推荐

    swift-针对WKWebView进行的封装支持和H5交互包括调用js方法等

    在iOS应用开发中,Swift语言为我们提供了强大的框架和工具,其中WKWebView是苹果推荐用于加载网页内容和实现原生应用与HTML5(H5)页面交互的重要组件。本知识点主要聚焦于如何使用Swift对WKWebView进行封装,以及...

    swift-基于WKWebView控件上跨平台框架

    "swift-基于WKWebView控件上跨平台框架"是一个专注于利用WKWebView实现跨平台功能的项目,旨在提升移动应用的性能和用户体验。WKWebView是苹果在iOS 8及更高版本中引入的一个重要组件,它替代了旧有的UIWebView,为...

    swift-使用WKWebView的一个带下载的web浏览界面

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if navigationAction.request.url?.isFileURL ?...

    swift-帮助WKWebView管理cookie

    在iOS应用开发中,使用Swift语言进行Web内容展示时,我们常常会遇到WKWebView与cookie管理的问题。WKWebView是Apple推荐用来替代UIWebView的新一代网页视图组件,它提供了更好的性能和安全性。然而,与传统的...

    swift-iOS平台高效转换引擎json->modelmodel->json

    WHC_Model iOS平台高效转换引擎json->model,model->json,model->Dictionary,支持模型类继承其他模型类,支持指定路径转换,不区分json的key和模型属性名称大小写,自动处理json中null。

    swift -> 获取经纬度

    在Swift编程语言中,获取设备的经纬度是常见的地理定位任务,这主要涉及到CoreLocation框架。CoreLocation框架提供了一系列API,用于获取用户的地理位置信息。在iOS应用开发中,使用CoreLocation可以帮助开发者创建...

    swift-WKWebView封装快速浏览网页

    在iOS应用开发中,Swift语言提供了WKWebView组件,它是苹果推荐用来替代UIWebView的现代Web内容展示工具。WKWebView不仅性能更优,还支持最新的Web标准和技术,如HTML5、CSS3和JavaScript。本篇文章将深入讲解如何...

    Swift -> YSocket 新建 TCP 客户端

    "Swift -> YSocket 新建 TCP 客户端"这个标题暗示我们将会探讨一个名为YSocket的库,它可能是用Swift实现的一个轻量级TCP客户端库。这个库可能提供了方便的方法来创建、管理和操作TCP连接。让我们深入探讨一下相关的...

    swift-WKWebView显示HTML中的GIF动图WebP无损图片最简单最方便的接入

    只需在HTML中插入GIF图片的`<img>`标签即可: ```html <img src="path_to_your.gif" alt="GIF animation"> ``` 确保GIF文件已包含在你的应用资源中,并使用正确的URL路径引用它。 然而,对于WebP格式的无损图片,...

    swift-iOSUICollectionViewUICollectionViewCell长按拖动重新排序框架

    iOS UICollectionView UICollectionViewCell long press to drag the reorder framework(支付宝我的应用编辑,今日头条我的频道编辑)

    Swift-WKWebView(本地数据) 源码

    Swift-WKWebView(本地数据)源码解析与应用 Swift-WKWebView是Apple在其iOS和macOS平台上提供的一款用于在应用程序内嵌入Web内容的框架。WKWebView是WebKit框架的一部分,取代了旧的UIWebView,提供了更高效、性能更...

    swift-Yahoo开源的在线obj-c->swift工具

    Yahoo为了帮助开发者更方便地进行这种迁移,开源了一个在线工具——"swift-Yahoo开源的在线obj-c->swift工具"。这个工具允许开发者直接将Objective-C代码粘贴到网页中,然后自动生成对应的Swift代码。这大大简化了...

    pw-swift-core-SRU2017-7.9.3

    "pw-swift-core-SRU2017-7.9.3" 是一个开源的第三方Java库,专门设计用于解析和处理银行间的SWIFT报文。这个库的主要功能是为开发者提供工具,以便他们能够有效地封装和解析SWIFT标准化的金融通信格式。SWIFT(环球...

    swift-长按即可移动cell的UITableView

    ) -> Bool { // 实现开始拖动的逻辑 } override func continueTracking(with touch: UITouch, with event: UIEvent?) -> Bool { // 实现拖动过程中的逻辑,如更新cell的位置 return true } ``` 此外,还需要在`...

    Swift-WKWebView(网络连接) 源码

    Swift-WKWebView是苹果开发的一款用于在iOS和macOS应用中展示网页内容的高级框架,它是基于WebKit引擎的。WKWebView不仅提供了比旧版UIWebView更高效、更现代的渲染性能,还支持更多的API功能,使得开发者能更好地...

    swift-Swift-Radio-Pro完整的Swift2.0的App开源应用

    Swift-Radio-Pro是一款基于Swift 2.0编程语言开发的开源应用程序,专为iOS平台设计。这个项目提供了从头到尾构建一个功能完备的音乐电台应用的实例,对于学习Swift编程语言以及移动应用开发的开发者来说,是一个极其...

    swift-wkwebview

    Swift-WKWebView是一个基于WebKit框架的网页浏览解决方案,它提供了在iOS和macOS应用中内嵌网页内容的能力,而无需依赖任何第三方插件。WebKit是苹果公司的开源浏览器引擎,广泛用于Safari和其他苹果平台的应用程序...

    swift-swift-syntaxSwift语法库开源用于研究解析转换自动生成Swift代码

    `swift-syntax`是Apple官方为Swift语言提供的一种工具,它是一个纯Swift编写的库,专注于Swift代码的语法解析、转换和生成。这个库的开源对于开发者,特别是那些对编译器技术、代码生成或语言工具感兴趣的开发者来说...

    swift5.0 wkwebview封装 WKWeView.zip

    1. **WKWebView 的引入**:Swift 5.0 中引入 WKWebView,它是WebKit框架的一部分,用于在iOS和macOS应用中显示Web内容。WKWebView不仅能够加载HTML页面,还支持JavaScript执行、CSS样式控制、表单交互等功能。 2. *...

    IOS原生与h5交互--WKWEBVIEW

    let htmlString = "<html><body><h1>Hello, WKWebView!</h1></body></html>" webView.loadHTMLString(htmlString, baseURL: nil) ``` 或者 ```swift let url = URL(string: "https://www.example.com")! ...

Global site tag (gtag.js) - Google Analytics