LoginSignup
3
3

More than 5 years have passed since last update.

Android Kotlin: Crosswalk WebView でNativeメソッド と JavaScript 相互呼び出し

Last updated at Posted at 2017-07-21

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)
}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3