【问题标题】:How to Autofill forms in WKWebView Using User Defaults or JavaScript如何使用用户默认值或 JavaScript 在 WKWebView 中自动填充表单
【发布时间】:2021-01-04 01:02:06
【问题描述】:

你好 Swift 开发者! 我是快速编程的新手,几乎不需要帮助。

我正在开发一个非常简单的应用程序,它应该使用WkWebView自动填充它在其页面上的运输表单来简单地加载网络。

我已成功在 webView(WkWebView) 中获取页面。
首先它加载这个 url https://www.adidas.com/us,在选择商品到购物车后,它会进入这个交付页面 https://www.adidas.com/us/delivery,我们必须在其中填写 this 表单。在此之前,不需要登录信息。

我正在尝试使用 UIWebViewWkWebView 来完成,但无济于事,这是我的代码,UIWebView 部分已注释。

class ViewController: UIViewController, WKUIDelegate {

@IBOutlet weak var uiWebView: UIWebView!

var webView: WKWebView!
let url: String = "https://www.adidas.com/us/delivery"
let defaults = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()
    
    //WKWebView programatically so it can run below iOS 11
    let webConfiguration = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView
    
    if let safeUrl = URL(string: url){
        
        let request = URLRequest(url: safeUrl)
        webView.load(request)
        
    }
    
    //        uiWebView.loadRequest(NSURLRequest(url: NSURL(string: url)! as URL) as URLRequest)
    //        let result = uiWebView.stringByEvaluatingJavaScript(from: "document.title")
    //        print("result is: \(result!)")
  
        self.webView.evaluateJavaScript("document.getElementById('di-id-cab9a55c-9d253ce3').value = 'Hello'") { (result, error) in
            print(result) //This will Print Hello
        }

    
}



//    func webViewDidFinishLoad(_ webView: UIWebView) {
//
//        let email = defaults.string(forKey: "EMAIL")
//        let password = defaults.string(forKey: "Pass")
//
//        let fillForm = "document.getElementById('f_707d6a95-3ef9-4b76-a162-9361b4ef7d4d').value = \(password)"
//        webView.stringByEvaluatingJavaScript(from: fillForm)
//    }

}

还有Here'sFirst Name字段的inspect元素截图。

在此之后,我将使用用户默认值来自动填充数据。那一步我知道怎么做就卡在这里了!

我可以提供任何有用的代码 sn-p 或建议吗?我真的被困在这一点上! 提前致谢

【问题讨论】:

    标签: swift swift3 wkwebview autofill userdefaults


    【解决方案1】:

    首先:停止使用 UIWebView,因为它已从一侧弃用,并从 2020 年 12 月起停止由 AppStore 提供支持。

    您应该在 WKWebView 中设置navigationDelegate,并在页面加载时将值设置为webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 上的字段,例如:

    override func viewDidLoad() {
        super.viewDidLoad()
            
        ...
        webView?.navigationDelegate = self
        ...
    }
    
    extension ViewController : WKNavigationDelegate {
        
        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            // Set a delay for dynamic pages
            //DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                let fillForm = "document.getElementsByName('firstName')[0].value = 'My Name'"
                webView.evaluateJavaScript(fillForm, completionHandler: nil)
            //}
    }
    

    【讨论】:

    • 嗨@iUrii 感谢您给我一些指导,这个方法什么时候触发
    • 我已经实现了带有 print(#function) 语句的委托方法,但它没有在所有过程中被触发,你能告诉它什么时候触发吗?
    • 好的,它现在被触发了,但没有自动填充的魔力。
    • @AafaqAhmed 如果您的页面是动态构建的,您可以延迟或编写代码来检查输入是否可用 - 请参阅我更新的示例。
    • 谢谢你让我更进一步,我已经检查过了,已经耽误了时间。但它不起作用!,但我知道我离解决方案太近了,你多考虑一下可能会解决我的问题。我已经检查了您更新的示例,它与我自己的解决方案相同。但再次感谢。
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多