Передача данных из JavaScript в Android WebView - PullRequest
5 голосов
/ 05 февраля 2011

Я написал фрагмент кода 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 Ответ

2 голосов
/ 05 февраля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...