Передача данных из Javascript в Android WebView

Я написал фрагмент кода Java, который предназначен для вызова Java-кода из Javascript с помощью шлюза android WebView.

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();
   }
}

Вышеприведенный код проверяет загрузку веб-страницы, и как только страница будет завершена, она выведет функцию javascript, которая открывается с Java, чтобы она могла переносить то, что мне нужно со страницы.

Это не работает, как ожидалось, то, что он делает, просто обновляет страницу каждые несколько секунд. Я не уверен, что здесь не так?

Ответ 1

Ну, есть много вещей, которые довольно странны в том, что вы сделали.

  • Из Java вы запускаете Javascript... для перезвона на Java. Вы считаете, что это безопасно.

  • Загружается домашняя страница Google, которая будет выполнять перенаправление при обнаружении браузера Android в последний раз, когда я проверил.

  • Вы пытаетесь отобразить Toast, но вы не знаете, будет ли этот код работать в основном потоке приложения или нет.