Amr*_*uta 6 xcode hang javascriptcore swift
我正在使用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/,我正在尝试非常简单的电话.
有没有人遇到过这种问题?
我的快捷代码如下:
@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)"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在初始化上下文如下:
runContext = JSContext()
runContext.name = "test_Context"
windowToJs = WindowJS(name: "test")
runContext.setObject(windowToJs.self, forKeyedSubscript: "WindowJS")
Run Code Online (Sandbox Code Playgroud)
如果我用上面的代码替换上面代码中的最后两行而不实例化它,代码就无法加载.
runContext.setObject(WindowJS.self, forKeyedSubscript: "WindowJS")
Run Code Online (Sandbox Code Playgroud)
而javascript代码就像
function check() {
return WindowJS.getName()
}
Run Code Online (Sandbox Code Playgroud)
我确实看到在JS函数检查中遇到了断点,当调用WindowJS.getName时,xcode只是没有响应.
由于您从 Swift 调用 JavaScript 返回 Swift,因此您正在创建一个死锁。我不确定为什么会出现死锁,但最近我在 Mac 上使用 WKWebView 时遇到了类似的问题。
\n\n您需要将其解耦并使通信异步。这显然意味着在这种情况下你不能简单地从 JS 函数返回一个值。
\n\n为了解耦,您可以通过使用以下命令推迟 JavaScript 函数需要在当前运行循环迭代之外执行的工作来打破僵局setTimeout:
function myFunction() {\n setTimeout(function() {\n // The actual work is done here.\n // Call the Swift part here.\n }, 0);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n整个原生 \xe2\x86\x94\xef\xb8\x8e JavaScript 通信非常非常棘手。如果可以的话避免它。有一个名为XWebView的项目可能可以帮助您,因为它试图简化两个世界之间的桥梁。
\n| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |