Swift的网络视图仅将<head> </head> <body> </body>打印为innerhtml

时间:2019-07-16 18:45:36

标签: html ios swift xcode webview

我尝试遵循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)

我应该查看登录页面,但模拟器上没有任何内容(不是很重要,但会有所帮助)

1 个答案:

答案 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中什么也看不到:

enter image description here

这是我正在使用的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))")
        })

    }
}