【Swift】WKWebViewのJavaScript呼び出しは非同期

iOSアプリからJavaScriptを呼び出して返り値を受け取りたい場合、以下のように書けば返り値を受け取ることができます。非同期なので実行結果が返ってくる前に、次の行がどんどん実行されていきます

HTML+JavaScript

function sum(a, b) {
	return a + b;
}

iOS

var jscript = "sum(1,2);"
webView.evaluateJavaScript(jscript, completionHandler: { (object, error) -> Void in
            var ret = object as! NSNumber  
            println( "答え: \(ret)" )
            
        })

ちなみにUIWebViewだとこんな感じ。非同期ではありません。

var jscript = "sum(1,2);"
var ret = WebView.stringByEvaluatingJavaScriptFromString(jscript) as String!
println( "答え: \(ret)" )

というわけで、UIWebViewからWKWebViewに切り替えたい場合、JavaScriptからの返り値を受け取る処理を入れているとプログラムの流れが変わるので、ちょっと工夫が必要になります

タイトルとURLをコピーしました