2017-09-20 53 views
1

私はWKWebViewを使用してHTMLページを読み込み、evaluateJavaScriptを使用してjavascript関数を実行します。EvaluateJavaScript debug javascript function

ここで私はそれをどうしています。

  1. javascriptおよびCSSファイルへの参照をまとめてhtmlページを読み込みます。

    let request = URLRequest(url: "myhtmlpage.html") webView?.load(request)

    myhtmlpage.htmlは私がページをロードした後、関数呼び出しCalculateTax(amount)

  2. を持ってmyfunctions.jsインサイド

    <script src="js/myfunctions.js" type="text/javascript"></script>

  3. をmyfunctions.jsするスクリプト参照を持っています最初の手順でmyhtmlpage.htmlをご覧ください。私は計算をした後に "金額"を計算するために必要な日付を取るロジックを持っています。私は webView?.evaluateJavaScript(CalculateTax('\(amount)');)を使って、myhtmlpage.htmlで税金と税を計算するためのJavaスクリプト関数を実行します。

私はCalculateTax(amount)のjavascript機能をデバッグしたいと思います。私はsafariの開発ツールを使用して、CalculateTax(amount)の場所にブレークポイントを設定しましたが、ブレークポイントには達していません。どのボディも、WKWebView evaluateJavaScriptメソッドで実行されるjavascript関数をデバッグする方法を知っています。

答えて

0

メッセージハンドラを使用します。 JSに値を返すとSwiftに戻り、Xcodeのコンソールに出力できます。

まず、あなたが設定したコンテンツコントローラおよび構成を有していることを確認してください。

var contentController = WKUserContentController() 
var configuration = WKWebViewConfiguration() 

は、あなたのメッセージ名のリスナーとして自分自身を追加します。そして、コンテンツコントローラ、およびWebビューにコントローラに設定を割り当てる:

extension YourViewController : WKScriptMessageHandler { 

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 

     if error != nil { 
      if let str = message.body as? String { // or whatever you cast to 
       print(str) 
      } 
     } else { 
      // error handling 
     } 
    } 
} 

そして、JSからのメッセージを投稿:

contentController.add(self, name: "YOUR_MESSAGE_NAME") 
configuration.userContentController = self.contentController 
webView = WKWebView(frame: self.view.bounds, configuration: self.configuration) 

その後JSから戻って投稿されたメッセージをリッスンするために、デリゲートメソッドを実装ように:

// YOUR_MESSAGE_NAME needs to match what you registered for in the WKUserContentController 
window.webkit.messageHandlers.YOUR_MESSAGE_NAME.postMessage(MESSAGE_CONTENTS); 
+0

ありがとうウェズ!これは、javascriptの実行から特定の値を評価する必要がある場合、良い回避策です。 Google Analyticsの統計情報を取得するには、このコールバックをjavascriptのxcodeに既に使用しています。私は、行ごとの評価(F10、ステップアウト)を行う方法を探していました。しかし、私はハックを使用してそれをデバッグすることができました。私はテストしたいjavascript関数を呼び出すためにコマンドライン実行を使用しました。私はそれを実行すると、xcodeからペイロードをコピーし、それをJavaScriptに渡しました。私はそれをよく説明していない場合は申し訳ありません。 – raveen