公司项目中的一个页面设计成上部分原生,下面部分网页,所以需要准确获取网页高度。
总结所有步骤
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()
}
}
网友评论