gpt4 book ai didi

html - Swift 的 Web View 仅将 打印为 innerhtml

转载 作者:行者123 更新时间:2023-11-29 05:35:40 25 4
gpt4 key购买 nike

我试图关注 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)

我应该可以看到登录页面,但我在模拟器上没有得到任何东西(不是很重要,但会有帮助)

最佳答案

我从完全相同的教程中学习了 WkWebView!去基洛洛克吧!

在我进行了大量 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 中看到任何内容:

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))")
})

}
}

关于html - Swift 的 Web View 仅将 <head></head><body></body> 打印为 innerhtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com