【问题标题】:Passing Data From Javascript To Android WebView将数据从 Javascript 传递到 Android WebView
【发布时间】:2011-06-21 19:50:14
【问题描述】:

我编写了一段 Java 代码,旨在通过 android WebView 网关从 Javascript 调用 Java 代码。

webView = (WebView) findViewById(R.id.captchaView);
WebSettings ws = webView.getSettings();
ws.setJavaScriptEnabled(true);
webView.loadUrl("https://google.com/");

webView.setWebViewClient(BrowserHandler);
webView.addJavascriptInterface(new IJavascriptHandler(), "cpjs");

WebViewClient BrowserHandler = new WebViewClient() {
   @Override
   public void onPageFinished(WebView view, String url) {
      view.loadUrl("javascript:window.cpjs.onPageLoaded(document.body.innerHTML);void(0);");
   }
};

final class IJavascriptHandler {
   IJavascriptHandler() {
   }

   public void onPageLoaded(String html) {
      // this is called from JS
      Toast t = Toast.makeText(getApplicationContext(), "Yes", 2000);
      t.show();
   }
}

上面的代码检查网页加载,一旦页面加载完成,它将调用从 Java 公开的 javascript 函数,以便它可以从页面中携带我需要的内容。

这并没有按预期工作,它只是每隔几秒刷新一次页面。我不确定这里有什么问题?

【问题讨论】:

  • 请把更新后的代码发给我。提前致谢

标签: java javascript android webview


【解决方案1】:

嗯,你所做的事情有很多很奇怪的地方。

  • 在 Java 中,您正在触发 Javascript...回调到 Java。你假设这是安全的。

  • 您正在加载 Google 主页,它会在遇到 Android 浏览器时执行重定向,这是我上次检查的时间。

  • 您正在尝试显示Toast,但您不知道该代码是否会在主应用程序线程上运行。

【讨论】:

  • 你是对的。 Toast 将在 UI 线程上运行。我刚刚知道这是 WebView 中的一个错误,这就是为什么它不起作用。我在适用于 Android 的 Google Groups 上有一个帖子,我还需要将模拟器从 2.3 版卸载回 2.2 吗?
猜你喜欢
  • 2015-11-27
  • 2014-03-28
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2018-02-27
  • 2013-03-15
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多