【发布时间】:2016-06-19 14:04:18
【问题描述】:
我正在使用 JavascriptCode 框架编写一个 iOS 应用程序(使用 xcode 7.3 和 swift 2.2)。从 swift 调用 javascript 方法很完美,但是当我从 javascript 调用 swift 方法时,xcode 只是显示一个“加载”类型的符号,没有任何反应。我需要“强制退出”xcode 才能摆脱这种状态。 我关注了https://www.raywenderlich.com/124075/javascriptcore-tutorial 和http://nshipster.com/javascriptcore/,我正在尝试非常简单的调用。
有人遇到过这种问题吗?
我的swift代码如下:
@objc protocol WindowJSExports : JSExport {
var name: String { get set }
func getName() -> String
static func createWindowWithName(name: String) -> WindowJS
}
@objc class WindowJS : NSObject, WindowJSExports {
dynamic var name: String
init(name: String) {
self.name = name
}
class func createWindowWithName(name: String) -> WindowJS {
return WindowJS(name: name)
}
func getName() -> String {
NSLog("getName called from JS context")
return "\(name)"
}
}
我正在初始化上下文如下:
runContext = JSContext()
runContext.name = "test_Context"
windowToJs = WindowJS(name: "test")
runContext.setObject(windowToJs.self, forKeyedSubscript: "WindowJS")
如果我用下面的代码替换上面代码的最后两行而不实例化它,代码根本无法加载。
runContext.setObject(WindowJS.self, forKeyedSubscript: "WindowJS")
而javascript代码就这么简单
function check() {
return WindowJS.getName()
}
我确实在 JS 函数检查中看到了断点,当调用 WindowJS.getName 时,xcode 变得无响应。
【问题讨论】:
-
JavaScript 调用是如何触发的?从 Swift 调用它(甚至作为副作用)是偶然触发的吗?例如,您是否有可能以 Swift->JS->Swift 循环结束?
-
@DarkDust 谢谢!这就是正在发生的事情。如何在 JSContext 中实现类似“WKWebView 中 JavaScript 中的 postMessage”的异步效果?
标签: xcode swift freeze javascriptcore