2017-09-16 11 views
0

自分の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 
      } 
     } 
    } 

答えて

0

func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) { print("Finished navigating to url \(webView.url)"); }

...ログインボタンは、それが何かを処理するために二回クリックする必要がある今、私は解決策を見つけたと思いますが、何らかの理由で :fullyloadする

EDITを共有してください

WKWebViewのデリゲートをビューコントローラに設定するようにしてください

+0

WebViewのデリゲートを設定しましたが、まだ呼び出されることはありません... –

関連する問題