美文网首页
iOS-Swift-WKWebView获取网页高度

iOS-Swift-WKWebView获取网页高度

作者: 爱心随2012 | 来源:发表于2020-08-13 11:47 被阅读0次
    公司项目中的一个页面设计成上部分原生,下面部分网页,所以需要准确获取网页高度。

    总结所有步骤

    1.初始化WKWebView,并设置相关属性。
    2.实现WKNavigationDelegate代理方法,获取网页高度。
    3.WKWebView的一些处理(禁用长按弹出框、监听通过JS调用警告框)
    
    1.初始化WKWebView,并设置相关属性。
    //MARK:-设置webView的属性
    func setWebViewProperty() {
        webView = WKWebView(frame: view.bounds)
        
        if #available(iOS 11.0, *) {
            webView.scrollView.contentInsetAdjustmentBehavior = .never
        }
        webView.isOpaque = false
        webView.backgroundColor = UIColor.clear
        webView.navigationDelegate = self
        webView.uiDelegate = self    //监听通过JS调用警告框
        webView.scrollView.showsVerticalScrollIndicator = false
        webView.scrollView.bounces = false  //禁止弹回
        view.addSubview(webView)
    }
    
    2.实现WKNavigationDelegate代理方法。
    //MARK:****************WKNavigationDelegate****************
    extension Xxxxxxxx: WKNavigationDelegate {
        //页面加载完成之后调用
        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    
            weak var weakSelf = self
            webView.evaluateJavaScript("Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight)") { (result, error) in
                if result == nil { return }
                
                let height = "\(result!)".floatValue()
                weakSelf?.webView.frame.size.height = CGFloat(height)
            }
        }
    }
    
    3. WKWebView的一些处理(禁用长按弹出框、监听通过JS调用警告框)
    // 禁用长按弹出框
    webView.evaluateJavaScript(
        "document.documentElement.style.webkitTouchCallout='none';",
        completionHandler: nil)
    
    //MARK:****************WKUIDelegate****************
    extension Xxxxxxxx: WKUIDelegate {
        // 监听通过JS调用警告框
        func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
            MBProgressHUD.showSuccess(message)
            completionHandler()
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS-Swift-WKWebView获取网页高度

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