我使用WKWebView
加载html页面并使用evaluateJavaScript执行javascript函数。
这是我怎么做的。
加载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>
myfunctions.js内部我有一个函数调用CalculateTax(amount)
第一步在myhtmlpage.html上加载页面后。我有一个逻辑,可以在计算后拉出必要的日期来计算“金额”,我用
webView?.evaluateJavaScript(CalculateTax('\(amount)');)
执行java脚本函数来计算myhtmlpage.html上的税和显示税。
我想调试CalculateTax(amount)
javascript函数。我使用了safari开发人员工具并在CalculateTax(amount)
的地方放置了断点,但它没有达到断点。任何机构都知道如何调试使用WKWebView
,evaluateJavaScript方法执行的javascript函数。
答案 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);