我从完全相同的教程中学习了 WkWebView!去 Kilo Loco!
在我进行了大量 Stack Overflow 搜索之后,我的代码最终有所不同。
此代码在完成处理程序中打印 HTML,并将 HTML 保存到我在 ViewController 中定义的名为 webString 的 var:
webView.evaluateJavaScript(
"document.documentElement.outerHTML.toString()",
completionHandler: { (html: Any?, error: Error?) in
print("error: '\(String(describing: error))'")
self.webString = html as! String
// print("webString: '\(self.webString)'")
})
另外,记得添加 WKNavigationDelegate
class ViewController: UIViewController, WKNavigationDelegate {
并且,对于 macOS 应用,请在应用的“功能”选项卡中启用传入和传出网络访问。如果您忘记了这一步,您将不会在 WkWebView 中看到任何内容:
这是我工作的 iOS 视图控制器:
//
// ViewController.swift
//
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var currentHTML: String = ""
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.gmail.com")!
let request = URLRequest(url: url)
// webView.frame = CGRect(x: 0, y: 300, width: 300, height: 300)
self.webView = WKWebView(frame: CGRect(x: 0, y: 0, width:
self.view.frame.width, height: self.view.frame.height))
webView.navigationDelegate = self
webView.load(request)
view.addSubview(webView)
}
// WKNavigationDelegate method
func webView(_ webView: WKWebView, didFinish: WKNavigation!) {
webView.evaluateJavaScript(
"document.documentElement.outerHTML.toString()",
completionHandler: { (html: Any?, error: Error?) in
self.currentHTML = html as! String
print("In compHandler, HTML: \(self.currentHTML.count) bytes\n")
})
webView.evaluateJavaScript(
"document.getElementsByTagName('html')[0].innerHTML",
completionHandler: {(value, error) in
print("INNER HTML: \(value!)")
print("ERROR \(String(describing: error))")
})
}
}