javascript - Swift receiving javascript messages don't work
问题描述
I need that javascript send a message for swift but don't work.
The Swift Code:
class FirstViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler {
@IBOutlet weak var webview: WKWebView!
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print( "Enter here" )
if message.name == "jsHandler" {
print( message.body );
}
}
override func viewDidLoad() {
super.viewDidLoad()
let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "web")
let url = URL(fileURLWithPath: htmlPath!)
let request = URLRequest(url: url)
let user = WKUserContentController()
user.add(self, name: "jsHandler")
webview.configuration.userContentController = user
webview.uiDelegate = self
webview.navigationDelegate = self
webview.load(request)
}
The javascript code:
$(document).on( 'click', '.element', function() {
window.webkit.messageHandlers.jsHandler.postMessage( "Invoke swift" );
} );
Is something wrong or something missing?
解决方案
如果您在 webview.load(request) 之前使用仅在 viewDidLoad 中设置的 Storyboard
//webview is your @IBOutlet
webview.configuration.userContentController.add(self, name: "yourHandler")
webview.configuration.preferences.javaScriptEnabled = true
推荐阅读
- r - 大组筛分数据中最佳规范化过程的建议
- node.js - Node.js 中的 Google Speech-to-Text 引发错误“{ 处的文件不存在,或者它不是文件。ENOENT:没有这样的文件或目录,lstat”
- r - (函数(类,fdef,mtable)中的错误:无法为签名“estUD”、“字符”的函数“writeRaster”找到继承的方法
- c# - Blazor 扩展 InputSelect 组件
- apache-kafka - kafka 仅写入 1 个分区
- angular - Spring - Angular - 添加动态内容
- angular - Nebular 通用侧边栏页脚标签无法正确包装菜单项
- c - 扫描C中的字符串列表
- c++ - C++:使用已实现的函数创建“抽象类”
- python - 如何在函数内部调用类变量和方法?