2017-05-05 16 views
1

WKWebViewを使用して優先評価Javascriptのスウィフト機能を使用してhtml要素の名前または値を取得しようとしています。私は何も受け取りません。私はおそらく私の機能は、ページが読み込まれる前に発射されている、したがって要素を見つけることはないと思う。今はクラス名で要素テキストを取得しようとしています。ここで私のコードは、ViewControllerでですWKWebKitとSwiftを使用してHTML要素の値を取得する3

import UIKit 
    import WebKit 

    class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate { 

     var web: WKWebView! 

    override func loadView() { 
     let webConfiguration = WKWebViewConfiguration() 
     web = WKWebView(frame: .zero, configuration: webConfiguration) 
     web.uiDelegate = self 
     view = web 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let url = URL(string: "http://www.appcoda.com") 
     let myRequest = URLRequest(url: url!) 
     web.load(myRequest) 

     web.evaluateJavaScript("document.getElementByClassName('excerpt').innerText") {(result, error) in 
      if error != nil { 
        print(String(describing:result)) 
      } 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

答えて

0

あなたは部分的に正しいです。 evaluateJavascriptに電話をするまでにウェブサイトの読み込みが完了しません。しかし、また、他のエラーがある:あなたが原因のApp交通安全へnavigationDelegate代わり

  • uiDelegateのを設定する必要があり

    • httpアドレスへのURL要求が許可されていません。ウェブサイトでサポートされている場合はhttps、それ以外の場合はconfigure your appを使用してください。

      override func viewDidLoad() { 
          super.viewDidLoad() 
      
          web = WKWebView(frame: .zero) 
          web.navigationDelegate = self 
      
          let url = URL(string: "https://www.appcoda.com") 
          let myRequest = URLRequest(url: url!) 
          web.load(myRequest) 
      } 
      
      func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 
          web.evaluateJavaScript("document.getElementsByClassName('excerpt')[0].innerText") {(result, error) in 
           guard error == nil { 
            print(error!) 
            return 
           } 
      
           print(String(describing: result)) 
          } 
      } 
      
      :あなたはあなたがこれを試してみてくださいinnerText

  • のを見つけたいものを要素選択する必要がありますので、関数名( getElementsを逃す)
  • getElementsByClassNameは、配列を返すスペルミス
  • +0

    この問題をお手伝いいただきありがとうございます。残念ながら、それは動作しませんでした。このコードを打ち、私のコメントにコメントすると、Webビューは読み込まれません。ガードエラーもありますが、これは修正するのに大したことではありません。私は行方不明の何か他のものがありますか? @コード違う – plgelso

    関連する問題