Swift中UIWebView中的Javascript控制台日志
有没有办法打印UIWebView网页中的“console.log”或swift中的WKWebView(如Chrome F12)创建的日志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的基本实现:
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