2017-09-20 71 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