【问题标题】:How do I pass return values from a javascript function to android?如何将返回值从 javascript 函数传递到 android?
【发布时间】:2011-07-12 23:28:22
【问题描述】:

我想让我的 android 应用调用一个用 javascript 编写的函数,并期望得到一个返回值。

我知道 WebView.loadUrl 是异步工作的,所以我现在要做的是让 javascript 在完成时通知我的 android 应用程序,并通过使用 javascript接口。

我想知道是否有更好的方法可以做到这一点,是否有人注意到 javascript 和 android 之间的任何消息丢失。

【问题讨论】:

标签: javascript android webview


【解决方案1】:

我刚遇到你的问题。

有一个这样的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 上发表了后续帖子,没有好的答案,但最终解决了它,因为知道问题是字符串中的特殊字符,所以采取特殊的使用字符串来回传递时的字符。

Passing Data From Javascript To Android WebView

HTML String Inside Nested String

HTML TextArea Characters Limit Inside Android WebView

【讨论】:

  • 根据我现在理解的问题进行了编辑。
  • 感谢您的回复。我在这里一直在做类似的事情。我发现从 java 到 javascript 的调用是异步的,但向后的调用是同步的。那正确吗?另外,您是否注意到在您的实验中从 javascript 到 java 的任何消息丢失?
  • 这很明显第一个是异步的,另一个是同步的,但我还没有阅读文档。我的工作更多是将大量 HTML 数据从 Java 发送到 JS,我确实发现由于长 HTML 字符串中的特殊字符导致数据丢失,而且我还发现我们不能只使用 webView.loadUrl(" ...");所以我有一个解决方法。
  • 哪些字符会引起问题? “巨大”有多大?
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多