通过@JavascriptInterface 将字符串从 Android 传递到 WebView 中的 JS

Passing a string from Android to JS in a WebView via @JavascriptInterface

这是我的 Javascript 界面:

class WebAppInterface(val context: Context){

    @JavascriptInterface
    fun provideAString():String{
        println("executed from js")
        println("this is text")
        return "this is text"
    }

    @JavascriptInterface
    fun printTheString(s:String){
        println(s)
    }
}

以下是我将其添加到 WebView 的方法:

webView.addJavascriptInterface(WebAppInterface(this), "Android")

下面是我如何从 JS 调用这两个函数:

function StringFromAndroid(){
    var string=Android.provideAString();
}

...
...

var currentString=new StringFromAndroid();
Android.printTheString(currentString.string);

打印行如下:

I/System.out: executed from js  
I/System.out: this is text
I/System.out: undefined

预期行为:

打印第 1 行和第 2 行表明 provideAString() 被 JS 正确调用。打印第 3 行显示 printTheString(s) 被 JS 正确调用,但是 WebView 中 currentString.string 的值是“未定义的”。预期的行为是,当 var currentString=new StringFromAndroid(); 通过行 var string=Android.provideAString(); 强制调用 Android.provideAString(); 时,该调用将 return 字符串“this is text”并设置 var string 具有该值,因此 currentString.string 将是“这是文本”而不​​是“未定义”。

Android.provideAString();的值赋给this:

function StringFromAndroid() {
    this.string = Android.provideAString();
}