【发布时间】:2016-07-09 15:26:28
【问题描述】:
我想在 Web 视图之外使用 WKWebView 提供的异步功能。 JS Context 选项不提供异步功能。
在 WKWebView 中,我的逻辑如下。
func swiftFunc1() {
webView.evaluateJavaScript("jsFunc1(), completionHandler: nil)
}
在 javascript 代码中我向 swift 发布消息
function jsFunc1() {
window.webkit.messageHandlers.myMsg.postMessage("call swiftFunc2");
}
然后,swift 代码可以调用适当的 JS 回调作为处理消息的一部分。
但这取决于 webview 是前景视图。如果我想使用独立于 webview 的 JS 逻辑,JSContext 是选项。我试过了
func swiftFunc1() {
myCtxt = JSContext()
exportedToJS = exportToJS() //confirms to JSExport and uses @objc
myCtxt.setObject(exportedToJS.self, forKeyedSubscript: "swiftIface")
myFunc = myCtxt.objectForKeyedSubscript("jsFunc1")
myFunc.callWithArguments(nil)
}
现在在 javascript 代码中,我无法向 swift 发布消息。如果我尝试如下调用 swift 函数,代码会永远卡住。
function jsFunc1() {
swiftIface.swiftFunc2() // This creates a deadklock
}
如何在不从被调用的 Javascript 函数 jsFunc1() 中“返回”的情况下实现以下任一功能?
要么向 swift 发布消息,以便它可以采取适当的措施
或调用 swift 函数以便采取适当的措施
【问题讨论】:
标签: swift wkwebview javascriptcore