通过@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();
}
这是我的 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();
}