Swift中UIWebView中的Javascript控制台日志

Swift中UIWebView中的Javascript控制台日志,javascript,swift,uiwebview,console.log,Javascript,Swift,Uiwebview,Console.log,有没有办法打印UIWebView网页中的“console.log”或swift中的WKWebView(如Chrome F12)创建的日志 祝您愉快。以下是UIWebView的基本实现: import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Create the web view.

有没有办法打印UIWebView网页中的“console.log”或swift中的WKWebView(如Chrome F12)创建的日志


祝您愉快。

以下是
UIWebView的基本实现:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create the web view.
        let webView = UIWebView()
        webView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(webView)
        webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        webView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        webView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        webView.delegate = self
        webView.loadRequest(URLRequest(url: URL(string: "https://www.google.com.py")!))
    }
}

extension ViewController: UIWebViewDelegate {
    func webViewDidFinishLoad(_ webView: UIWebView) {
        let js = "console.log = function() {window.location = 'logger://webview?' + JSON.stringify(Array.prototype.slice.call(arguments))}"
        webView.stringByEvaluatingJavaScript(from: js)
    }

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if request.url?.scheme == "logger" {
            guard let data = request.url?.query?.removingPercentEncoding?.data(using: .utf8) else { return true }
            guard let obj = try? JSONSerialization.jsonObject(with: data, options: []) else { return true }
            guard let jsonData = try? JSONSerialization.data(withJSONObject: obj, options: .prettyPrinted) else { return true }
            guard let json = String(data: jsonData, encoding: .utf8) else { return true }
            print(json)
        }
        return true
    }
}
示例

console.log(4, 3.53, 'Hello', {d: {f: 4}}, function() {}, undefined, null, true)
在Xcode日志中打印以下内容:

[
  4,
  3.5299999999999998,
  "Hello",
  {
    "d" : {
      "f" : 4
    }
  },
  null,
  null,
  null,
  true
]
注意事项

  • 这仅打印页面加载后执行的日志
  • 由于我们使用的是JSON.stringify,因此无法打印以下类型:
    函数
    未定义
  • 因为我们使用的是JSON.stringify,
    true
    false
    是 分别打印为
    1
    0