Swift 如何使用用户默认值或JavaScript在WKWebView中自动填充表单

Swift 如何使用用户默认值或JavaScript在WKWebView中自动填充表单,swift,swift3,wkwebview,autofill,userdefaults,Swift,Swift3,Wkwebview,Autofill,Userdefaults,您好,斯威夫特开发者!。 我是swift编程新手,不需要什么帮助 我正在开发一个非常简单的应用程序,它只需使用WkWebView和autofill页面上的发货表单加载web即可。 我已成功地在webView(WkWebView)中获取页面。 首先,它加载这个url,在选择购物车中的项目后,它进入这个交付页面,我们必须在这里填写表单。在此之前,不需要登录信息 我正试图用UIWebView和WkWebView两种方法来完成这项工作,但是没有用,我的代码是这样的,UIWebView部分被注释了 cla

您好,斯威夫特开发者!。 我是swift编程新手,不需要什么帮助

我正在开发一个非常简单的应用程序,它只需使用
WkWebView
autofill页面上的发货表单加载web即可。

我已成功地在webView(
WkWebView
)中获取页面。
首先,它加载这个url,在选择购物车中的项目后,它进入这个交付页面,我们必须在这里填写表单。在此之前,不需要登录信息

我正试图用
UIWebView
WkWebView
两种方法来完成这项工作,但是没有用,我的代码是这样的,
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)
//    }
}

以及
First Name
字段的inspect元素的屏幕截图

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

能给我一些有用的代码片段或建议吗?我真的被困在这一点上了!
提前感谢

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

加载页面时,应将
navigationDelegate
设置为WKWebView,并将值设置为
webView(\uwebview:WKWebView,didfish navigation:WKNavigation!)
上的字段,例如:

override func viewDidLoad(){
super.viewDidLoad()
...
webView?.navigationDelegate=self
...
}
扩展视图控制器:WKNavigationDelegate{
func webView(webView:WKWebView,didfish导航:WKNavigation!){
//设置动态页面的延迟
//DispatchQueue.main.asyncAfter(截止日期:.now()+2){
让fillForm=“document.getElementsByName('firstName')[0]。值='My Name'”
evaluateJavaScript(fillForm,completionHandler:nil)
//}
}

Hi@iUrii谢谢你给我一些指导,这个方法什么时候会触发?我已经用print(#函数)实现了委托方法语句,但在all过程中它没有被触发,您能告诉我什么时候它会被触发吗?好的,它现在被触发了,但没有自动填充的魔力。@aafakahmed如果您的页面是动态构建的,您可以延迟或编写代码来检查输入是否可用-请参阅我的更新示例。谢谢您为我做了一个简单的介绍tep进一步说,我已经检查了这一点,并推迟了时间。但它不起作用!但我知道我离解决方案太近了,您稍微多考虑一下可能会解决我的问题。我已经检查了您的更新示例,它与我自己的解决方案相同。但再次感谢。