EvaluateJavaScript调试javascript函数
我使用WKWebView
加载html页面并使用evaluateJavaScript执行javascript函数。EvaluateJavaScript调试javascript函数
这是我该怎么做。
-
加载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>
里面myfunctions.js我有一个函数调用
CalculateTax(amount)
在加载页面后myhtmlpage.html在第一步。我有一个逻辑推算必要的日期来计算“金额”后,我使用
webView?.evaluateJavaScript(CalculateTax('\(amount)');)
执行Java脚本函数来计算税收和显示税收myhtmlpage.html。
我想调试CalculateTax(amount)
javascript函数。我使用了safari开发者工具,并在CalculateTax(amount)
的地方放置了断点,但它没有达到断点。任何机构都知道如何调试使用WKWebView
,evaluateJavaScript方法执行的javascript函数。
使用消息处理程序。你将它们发布到你的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);
谢谢Wes!如果我必须评估JavaScript执行的某些值,这是一个很好的解决方法。我们已经使用这个回调来从JavaScript的xcode获得统计谷歌分析。我正在寻找一种逐行评估(F10,步出)的方法。但是我能够使用黑客进行调试。我使用命令行执行来调用我想测试的javascript函数。从xcode复制有效载荷,并在我执行它时将它传递给javascript。对不起,如果我没有解释得好。 – raveen