SwiftからWKWebview経由でTypeScriptのメソッドを叩く時に気をつけること
こんばんわ。キッチンカーアーティストのジャマです。
最近Typescript + Nuxtの開発もだいぶ、こなれてきました。TypeScriptの開発もキリが良くなってきたので、次はSwiftからWKWebviewを使って、TypeScriptと連携をする処理に取り掛かりました。
let js = "this.メソッド名;"
wkWebView.evaluateJavaScript(js, completionHandler: { (object, error) -> Void in
print(error)
print("finish")
})
Swift上で上記処理を行うとTypeScript側のメソッドが実行されるという触れ込みでした。
がしかし!!!
何回実行しても
Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=TypeError: this.postDevice is not a function. (In 'this.postDevice()', 'this.postDevice' is undefined), WKJavaScriptExceptionColumnNumber=16, WKJavaScriptExceptionSourceURL=undefined, NSLocalizedDescription=A JavaScript exception occurred})
メソッドが存在しないというエラーが出ました。
色々と頑張った結果
TypeScript側のmountedメソッドに追加が必要でした。
mounted(){
window['メソッド名'] = (data)=>{
this.メソッド名(data)
}
}
この処理を追加しないとSwift側からメソッドが見つけられないようです。jsとかTypeScriptに疎くて何をしているのかわからないのですが、上記処理でメソッドをグローバル化しないとSwift側から見つけられないのではないでしょうか。
どうしてもevaluateJavaScriptでTypeScript側のメソッドが叩けない時は上記の処理を追加してみて下さい。