将数据从Javascript传递到Android WebView

时间:2011-02-05 09:46:55

标签: java javascript android webview

我编写了一段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函数,以便它可以从页面中携带我需要的东西。

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

1 个答案:

答案 0 :(得分:2)

嗯,你所做的事情中有很多事情都很奇怪。

  • 从Java中,您正在触发Javascript ...以回调Java。你认为这是安全的。

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

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