自分のUIからユーザーのサインインがあるアプリケーションを作成しようとしています。私はデータを引き出しているtextLabelを持っています。そのデータをtajeして、それを使ってウェブサイトにオンラインでログインし、一度データを取得したいと思います。私が今持っているのは、ほとんどの場合、見えないWKWebViewです私はそれにログインしたいWebサイトをクリックし、フォームのログを記入して、evaluateJavaScriptを介してボタンをクリックします。私の唯一の問題は、ユーザーが間違ってログインしたかどうかを確認できる何かを考え出すことです。私がやろうとしているのは、javascriptが実行されるまで待ってからwebViewをチェックし、URLがページのログインに変わったかどうかを確認することです。ただし、ユーザーが正しいパスワードを入力できなかった場合にのみ機能します。彼らが間違ったパスワードを一度取得した場合、それ以降のすべてのエントリはパスワードが間違っていると言います。私は、ページが読み込まれているかどうかを確認するために観測値を使用していますが、私はこれを実装するのに助けが必要です。IOS APPのWebサイトにswift/javascriptを使用してログインするには
@IBAction func loginBtnPressed(_ sender: Any) {
if(!validate(usernameText) || !validate(passwordText))
{
self.validationLabel.text = "One or more fields are empty."
UIView.animate(withDuration: 0.25, animations: {
self.validationLabel.isHidden = false
})
return;
}
let oldUrl = webView.url?.absoluteString;
self.validationLabel.isHidden = true
webView.evaluateJavaScript("document.getElementById('fieldAccount').value = \(usernameText!.text!)", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
webView.evaluateJavaScript("document.getElementById('fieldPassword').value = '\(passwordText!.text!)'", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
webView.evaluateJavaScript("document.getElementById('btn-enter').click()", completionHandler: {(result,err) in
print(result ?? "No Result"); print (err ?? "No Error") })
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(6), execute: {
// Put your code which should be executed with a delay here
if(self.webView.url?.absoluteString.contains("termGrades"))!
{
print("We're in bois: ")
self.view = self.webView
}else
{
print("Did not get to grades page..")
self.validationLabel.text = "Invalid Username/Password"
UIView.animate(withDuration: 0.25, animations: {
self.validationLabel.isHidden = false
})
let portalURL = URL(string: "*website*")
let request = URLRequest(url: portalURL!)
self.webView.load(request)
return;
}
}) }
私は新しいiOSデベロッパだが、あなたは任意の助けを持っている場合、私は、これをあきらめたくない、またはより良い方法の提案は、ボタンやページをクリックしてJavaScriptのを待ちます私は
@IBAction func loginBtnPressed(_ sender: Any) {
if(!validate(usernameText) || !validate(passwordText))
{
self.validationLabel.text = "One or more fields are empty."
UIView.animate(withDuration: 0.25, animations: {
self.validationLabel.isHidden = false
})
return;
}
self.validationLabel.isHidden = true
webView.evaluateJavaScript("document.getElementById('fieldAccount').value = \(usernameText!.text!.description)", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
webView.evaluateJavaScript("document.getElementById('fieldPassword').value = '\(passwordText!.text!)'", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
webView.evaluateJavaScript("document.getElementById('btn-enter').click()", completionHandler: {(result,err) in
print(result ?? "No Result"); print (err ?? "No Error") })
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "loading"
{
if(!webView.isLoading) {
print("Finished navigating to url \(webView.url!)");
if(webView.url! == URL(string: "**"))
{
statusLabel.text = "Done."
}else if(webView.url! == URL(string: "**"))
{
self.validationLabel.text = "Invalid Username/Password"
UIView.animate(withDuration: 0.25, animations: {
self.validationLabel.isHidden = false
})
}else if(webView.url! == URL(string: "**"))
{
self.view = webView
}
}
}
WebViewのデリゲートを設定しましたが、まだ呼び出されることはありません... –