How to access username and password entered into a WKWebView in Swift 3

Viewed 641

I am trying to build an iOS app using a WKWebView in Swift 3. The WebView loads a website from its URL. I need to be able to access the username and password that the user enters into the WebView in order to save it to UserDefaults when the user clicks the submit button. Is there a way to do this? Thank you!!

1 Answers

funcionando en xcode 12.4

extension ViewController: WKNavigationDelegate{

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    

    let lurl:String = webView.url?.absoluteString ?? ""
    
    if (lurl.contains(pagweb+"index.php")) { 
        let defaults = UserDefaults.standard
        var user:String = ""
        var pass:String = ""
        var rememberme: Bool = false
        
        wv.evaluateJavaScript("document.getElementById('user').value;") { (res, error) in
            if res != nil {
                user = res as! String
            }
        }
        wv.evaluateJavaScript("document.getElementById('pass').value;"){ (res, error) in
            if res != nil {
                pass = res as! String
            }
        }
        wv.evaluateJavaScript("document.getElementById('rememberme').checked;"){ (res, error) in
            if res != nil {
                rememberme = res as! Bool
                if rememberme {
                    defaults.set(user, forKey: "USERNAME")
                    defaults.set(pass, forKey: "PASSWORD")
                    defaults.set(true, forKey: "rememberme")
                }else if pass.count > 7 && user.count > 0{
                    defaults.set("", forKey: "USERNAME")
                    defaults.set("", forKey: "PASSWORD")
                    defaults.set(false, forKey: "rememberme")
                }
            }
        }
        
    }
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

    // user - pass - rememberme
    let savedUsername = UserDefaults.standard.string(forKey: "USERNAME")
    let savedPassword = UserDefaults.standard.string(forKey: "PASSWORD")
    let savedrememberme = UserDefaults.standard.bool(forKey: "rememberme")
    
    if savedrememberme {
        wv.evaluateJavaScript("document.getElementById('user').value = '"+savedUsername!+"';")
        wv.evaluateJavaScript("document.getElementById('pass').value = '"+savedPassword!+"';")
        wv.evaluateJavaScript("document.getElementById('rememberme').checked = true;")
    }else{
        wv.evaluateJavaScript("document.getElementById('user').value = '';")
        wv.evaluateJavaScript("document.getElementById('pass').value = '';")
        wv.evaluateJavaScript("document.getElementById('rememberme').checked = false;")
    }
}

}

Related