我想让我的 Android 应用程序调用由 JavaScript 编写的函数,并期望从中返回值。
我了解到 WebView.loadUrl 是异步工作的,所以现在我正在让 JavaScript 在完成时通知我的 Android 应用程序,并通过使用 javascriptinterface 调用 Java 函数来传递返回值。
我想知道是否有更好的方法来做到这一点,是否有人注意到 JavaScript 和 Android 之间存在信息丢失。
我想让我的 Android 应用程序调用由 JavaScript 编写的函数,并期望从中返回值。
我了解到 WebView.loadUrl 是异步工作的,所以现在我正在让 JavaScript 在完成时通知我的 Android 应用程序,并通过使用 javascriptinterface 调用 Java 函数来传递返回值。
我想知道是否有更好的方法来做到这一点,是否有人注意到 JavaScript 和 Android 之间存在信息丢失。
我明白了你的问题。
像这样有一个JS函数。
function androidResponse() {
window.cpjs.sendToAndroid("I am being sent to Android.");
}
设置Android(Java)。
编写一个最终类如下:
final class IJavascriptHandler {
IJavascriptHandler() {
}
// This annotation is required in Jelly Bean and later:
@JavascriptInterface
public void sendToAndroid(String text) {
// this is called from JS with passed value
Toast t = Toast.makeText(getApplicationContext(), text, 2000);
t.show();
}
}
在您的 WebView 加载时执行。
webView.addJavascriptInterface(new IJavascriptHandler(), "cpjs");
调用JS函数
webView.loadUrl("javascript:androidResponse();void(0)");
更新
我曾经遇到过一个非常糟糕的问题,就是从Java传递数百行字符串到JS时出现问题。我在StackOverflow上发布了相关问题,但没有得到好的答案。最终我解决了这个问题,发现问题出在字符串中的特殊字符,因此在传递字符串时要注意特殊字符。