Tôi đang viết Ứng dụng iOS (sử dụng xcode 7.3 và nhanh 2.2) bằng cách sử dụng khung JavascriptCode. Gọi javascript phương pháp từ các công trình nhanh chóng hoàn hảo, nhưng khi tôi gọi phương thức nhanh chóng từ javascript, xcode chỉ đơn giản là cho thấy một "tải" loại biểu tượng và không có gì xảy ra. Tôi cần phải "buộc bỏ" xcode để thoát khỏi trạng thái này. Tôi đã theo dõi https://www.raywenderlich.com/124075/javascriptcore-tutorial và http://nshipster.com/javascriptcore/ và tôi đang thử các cuộc gọi khá đơn giản.Gọi đến phương thức nhanh từ JavaScript treo xcode và ứng dụng
Có ai phải đối mặt với loại sự cố này không?
đang nhanh chóng của tôi là như sau:
@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)"
}
}
Tôi khởi tạo bối cảnh như sau:
runContext = JSContext()
runContext.name = "test_Context"
windowToJs = WindowJS(name: "test")
runContext.setObject(windowToJs.self, forKeyedSubscript: "WindowJS")
Nếu tôi thay thế hai dòng cuối cùng trong mã trên với dưới mã mà không instantiating nó, mã không tải được.
runContext.setObject(WindowJS.self, forKeyedSubscript: "WindowJS")
Và mã javascript đơn giản như
function check() {
return WindowJS.getName()
}
Tôi thấy breakpoint bị trúng trong việc kiểm tra chức năng JS và khi WindowJS.getName được gọi, xcode đơn giản trở nên bất tỉnh.
Cuộc gọi JavaScript được kích hoạt như thế nào? Liệu nó có phải là ngẫu nhiên được kích hoạt bằng cách gọi nó (thậm chí là một tác dụng phụ) từ Swift không? Ví dụ: bạn có thể kết thúc bằng Swift-> JS-> Swift cycle không? – DarkDust
@DarkDust Cảm ơn! Đó là những gì đang xảy ra. Làm thế nào tôi có thể đạt được một hiệu ứng không đồng bộ như của "postMessage trong JavaScript trong WKWebView" trong một JSContext? – Amruta