Sto scrivendo un'app per iOS (utilizzando xcode 7.3 e swift 2.2) utilizzando il framework JavascriptCode. Chiamare i metodi javascript da swift funziona perfettamente, ma quando chiamo il metodo swift da javascript, xcode mostra semplicemente un tipo di "caricamento" di simbolo e non succede nulla. Ho bisogno di "forzare l'uscita" xcode per uscire da questo stato. Ho seguito https://www.raywenderlich.com/124075/javascriptcore-tutorial e http://nshipster.com/javascriptcore/ e sto provando le chiamate abbastanza semplici.Chiamata al metodo rapido da JavaScript si blocca xcode e applicazione
Qualcuno ha affrontato questo tipo di problema?
Il mio codice swift è il seguente:
@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)"
}
}
sto inizializzazione del contesto come segue:
runContext = JSContext()
runContext.name = "test_Context"
windowToJs = WindowJS(name: "test")
runContext.setObject(windowToJs.self, forKeyedSubscript: "WindowJS")
Se sostituisco le ultime due righe di codice precedente con sottostante codice senza creare un'istanza di esso, il codice semplicemente non riesce a caricare.
runContext.setObject(WindowJS.self, forKeyedSubscript: "WindowJS")
E il codice JavaScript è semplice come
function check() {
return WindowJS.getName()
}
Io vedo il punto di interruzione viene colpito al controllo funzionale JS e quando il WindowJS.getName viene chiamato, Xcode diventa semplicemente non risponde.
Come viene attivata la chiamata JavaScript? È per caso innescato chiamandolo (anche come effetto collaterale) da Swift? Ad esempio, è possibile che tu finisca con un ciclo Swift-> JS-> Swift? – DarkDust
@DarkDust Grazie! Questo è ciò che sta accadendo. Come posso ottenere un effetto asincrono come quello di "postMessage in JavaScript in WKWebView" in un JSContext? – Amruta