Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@jhelom

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

More than 3 years have passed since last update.

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
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
jhelom

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?