Kotlin から Crosswalk の javascript の関数を呼び出す
javascript で下記の関数が定義されているとする。
関数foo は、ネイティブからJavaScript を呼び出したい例。
関数bar は、JavaScriptからネイティブのメソッドを呼び出したい例。
javascript
function foo(msg) {
alert(msg);
return msg + msg;
}
function bar() {
alert(native.bar("A", "B"));
}
アクティビティのonCreateでCrosswalkにJavaScript呼び出しを担当するクラス(この例では JavaScriptBridge というクラス)を追加する。
MainActivity.kt
xwalkview.addJavascriptInterface(JavaScriptBridge(this, xwalkview), "native")
JavaScriptからの呼び出しを受け付けるクラスを作成する。
JavaScripBridge.kt
import android.content.Context
import android.net.ConnectivityManager
import org.xwalk.core.JavascriptInterface
import org.xwalk.core.XWalkView
class JavaScriptBridge(private val context: Context, private val web: XWalkView) {
@JavascriptInterface
fun bar(a: String, b: String): String {
return a + b
}
}
これで、JavaScript からは native オブジェクトを経由してネイティブ(JavaScriptBridgeクラス)を呼び出せるようになる。
JavaScript から Kotlin のメソッドを呼び出す
evaluateJavascript メソッドで呼び出したいJavaScriptコードを文字列で渡す。
JavaScript からの戻り値はコールバックで受け取ることができる。
xwalkview.evaluateJavascript("foo('android')") { value ->
Log.d("RESULT", value)
}