iOS-Swift-WKWebView获取网页高度

公司项目中的一个页面设计成上部分原生,下面部分网页,所以需要准确获取网页高度。

总结所有步骤

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获取网页高度)