見出し画像

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側のメソッドが叩けない時は上記の処理を追加してみて下さい。

いいなと思ったら応援しよう!