2017-09-20 1338 views
1

我使用WKWebView加載html頁面並使用evaluateJavaScript執行javascript函數。EvaluateJavaScript調試javascript函數

這是我該怎麼做。

  1. 加載html頁面和一堆對javascript和CSS文件的引用。

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

    myhtmlpage.html有腳本參考myfunctions.js

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

  2. 裏面myfunctions.js我有一個函數調用CalculateTax(amount)

  3. 在加載頁面後myhtmlpage.html在第一步。我有一個邏輯推算必要的日期來計算「金額」後,我使用 webView?.evaluateJavaScript(CalculateTax('\(amount)');)執行Java腳本函數來計算稅收和顯示稅收myhtmlpage.html。

我想調試CalculateTax(amount) javascript函數。我使用了safari開發者工具,並在CalculateTax(amount)的地方放置了斷點,但它沒有達到斷點。任何機構都知道如何調試使用WKWebView,evaluateJavaScript方法執行的javascript函數。

回答

0

使用消息處理程序。你將它們發佈到你的JS中,它將返回值給Swift,你可以在Xcode中打印到控制檯。

首先,確保你有一個內容控制器和配置設置:

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

添加自己作爲聽衆的來信名。然後分配配置到內容控制器,控制器到Web視圖:

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

然後實現委託方法來監聽消息從JS調回:從JS

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 
     } 
    } 
} 

和POST消息像這樣:

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

謝謝Wes!如果我必須評估JavaScript執行的某些值,這是一個很好的解決方法。我們已經使用這個回調來從JavaScript的xcode獲得統計谷歌分析。我正在尋找一種逐行評估(F10,步出)的方法。但是我能夠使用黑客進行調試。我使用命令行執行來調用我想測試的javascript函數。從xcode複製有效載荷,並在我執行它時將它傳遞給javascript。對不起,如果我沒有解釋得好。 – raveen