我尝试遵循this tutorial使用Webview,但是在编写此代码时:
webView.evaluateJavaScript("document.getElementsByTagName('html')[0].innerHTML",
completionHandler: {(value, error) in
print("INNER HTML: \(value!)")
print("ERROR \(String(describing: error))")
我应该在控制台中得到的是<head></head><body></body>
,它应该打印gmail的内部html。为什么会发生这种情况,我该如何解决?
此外,通过此代码:
let url = URL(string: "https://www.gmail.com")!
let request = URLRequest(url: url)
webView.frame = CGRect(x: 0, y: 300, width: 300, height: 300)
webView.load(request)
view.addSubview(webView)
我应该查看登录页面,但模拟器上没有任何内容(不是很重要,但会有所帮助)
答案 0 :(得分:0)
我从完全相同的教程中学到了WkWebView!去Kilo Loco!
在进行了很多Stack Overflow搜索之后,我的代码最终有所不同。 这段代码在完成处理程序中打印HTML,并将HTML保存到我在ViewController中定义的名为webString的变量中:
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 View Controller:
//
// 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))")
})
}
}