Reputation: 183
Please tell me, I'm trying to take input value from webview. Why do I get "nil". What could be the problem? Screen provided below
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
WebView().edgesIgnoringSafeArea(.all)
}
}
struct WebView: UIViewRepresentable {
func makeUIView(context: Context) - > WKWebView {
let webView = WKWebView()
webView.scrollView.isScrollEnabled = false
return webView
}
func updateUIView(_ webView: WKWebView, context: Context) {
let liveView = "https://**/"
if let url = URL(string: liveView) {
let request = URLRequest(url: url)
webView.load(request)
webView.evaluateJavaScript("document.getElementById('ses').value") {
(result, error) in
print(result)
}
}
}
}
Upvotes: 0
Views: 1672
Reputation: 109
You need to check if webView is completely loaded.
To check if webView is loaded:
class ViewController: WKNavigationDelegate{
let webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
webView.navigationDelegate = self
let myURL = URL(string:"https://someWebSite.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("Loaded")
}
}
for more info about navigationDelegate
Upvotes: 1
Reputation: 183
You need to wait until the page loads.
let timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) {
(timer) in
webView.evaluateJavaScript("document.getElementById('ses').value") {
(result, error) in
print(result!)
}
}
Upvotes: 2
Reputation: 513
It seems like you don't have this element in your document.
// element exists
console.log(document.getElementById('demo').value)
// element doesn't exist
console.log(document.getElementById('foo'))
<div id="demo" value="demo-value">Demo</div>
Upvotes: -1