Javascript 使用 android 网络视图时无法正确计算方括号符号。有什么建议可以解决吗?
Javascript square bracket notation couldn't be evaluated properly while using an android webview. Any advice to fix it?
我正在使用 android webview 并希望通过 Javascript 接口进行动态函数调用。我的界面名称是 AndroidBridge。这是我的代码:
AndroidBridge[key](values[key]);
在浏览器上正常运行。但是当谈到我的网络视图时,抛出以下错误:
Error connecting controller TypeError: AndroidBridge[key] is not a function [object Object]"
有什么建议可以跳过这个问题吗?
我现在可以给你两个可能的原因:
- 缺少
@JavascriptInterface
注释。
- 缺少方法或参数不匹配。
我不知道为什么浏览器的 js 解释器会查找“该对象的正方形命名版本”,但是匹配的方法名称应该可以正常工作而不会出现该错误。
我可以在这里留下一个完整的示例:
class JsBridge {
@JavascriptInterface
fun showToast(message: String) {
Log.d("DEBUG", "JsBridge showToast message:$message")
val currentActivity = current ?: return
Toast.makeText(currentActivity, message, Toast.LENGTH_SHORT).show()
}
companion object {
@JvmStatic
val instance: JsBridge = JsBridge()
}
}
// Somewhere in your code
webView.addJavascriptInterface(JsBridge.instance, "AndroidBridge")
现在可以在js端调用该方法了:
AndroidBridge.showToast('A message');
// or
AndroidBridge['showToast']('A message');
他们都应该工作。
我正在使用 android webview 并希望通过 Javascript 接口进行动态函数调用。我的界面名称是 AndroidBridge。这是我的代码:
AndroidBridge[key](values[key]);
在浏览器上正常运行。但是当谈到我的网络视图时,抛出以下错误:
Error connecting controller TypeError: AndroidBridge[key] is not a function [object Object]"
有什么建议可以跳过这个问题吗?
我现在可以给你两个可能的原因:
- 缺少
@JavascriptInterface
注释。 - 缺少方法或参数不匹配。
我不知道为什么浏览器的 js 解释器会查找“该对象的正方形命名版本”,但是匹配的方法名称应该可以正常工作而不会出现该错误。
我可以在这里留下一个完整的示例:
class JsBridge {
@JavascriptInterface
fun showToast(message: String) {
Log.d("DEBUG", "JsBridge showToast message:$message")
val currentActivity = current ?: return
Toast.makeText(currentActivity, message, Toast.LENGTH_SHORT).show()
}
companion object {
@JvmStatic
val instance: JsBridge = JsBridge()
}
}
// Somewhere in your code
webView.addJavascriptInterface(JsBridge.instance, "AndroidBridge")
现在可以在js端调用该方法了:
AndroidBridge.showToast('A message');
// or
AndroidBridge['showToast']('A message');
他们都应该工作。