EvaluateJavaScript调试javascript函数

时间:2017-09-20 23:06:34

标签: javascript swift mobile-safari

我使用WKWebView加载html页面并使用evaluateJavaScript执行javascript函数。

这是我怎么做的。

  1. 加载html页面,其中包含对javascripts和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上的税和显示税。

  4. 我想调试CalculateTax(amount) javascript函数。我使用了safari开发人员工具并在CalculateTax(amount)的地方放置了断点,但它没有达到断点。任何机构都知道如何调试使用WKWebView,evaluateJavaScript方法执行的javascript函数。

1 个答案:

答案 0 :(得分:1)

使用消息处理程序。你将它们发布在你的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发回的消息:

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的消息:

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