Вызов JavaScript из Android - PullRequest
       6

Вызов JavaScript из Android

0 голосов
/ 28 октября 2018

У меня проблемы с вызовом основных функций JavaScript из Android. Когда я клонировал репозиторий из этого урока , а затем сократил его, я смог заставить код работать правильно. Однако, когда я пытался создать свой собственный свежий проект, я потерпел неудачу.

Я сослался на следующие сообщения и, похоже, делаю то же самое, но безрезультатно. Между подходами нет заметных различий, поэтому я чувствую, что вне этих файлов могут быть зависимости, которые мне не хватает?

Функции вызова из Android в WebView

Запуск кода JavaScript в Webview

Мне интересно, не упускаю ли я что-нибудь тонкое.

По сути, я просто пытаюсь получить любой вывод на консоль, вызывая функцию JavaScript, которая определена в ее собственном файле. Структура проекта выглядит следующим образом:

main
- assets
  - index.html
  - sketch.js

- java
  - com.mypackage
    - MainActivity.java

У меня есть файл sketch.js со следующей функцией внутри

function hello() {
    console.log("hello world");
}

И index.html файл со следующим кодом

<!DOCTYPE html>
<html>
  <head>
    <script src="sketch.js" type="text/javascript"></script>

  </head>
  <body>
  <canvas></canvas>
  </body>
</html>

Тогда из моего класса активности у меня есть следующий код Java

webView = (WebView) findViewById(R.id.webView);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("file:///android_asset/index.html");

webView.evaluateJavascript("javascript:hello();", null);
webView.evaluateJavascript("console.log('Hello world 2');", null);

В консоли в Android Studio вижу

[INFO:CONSOLE(1)] "Uncaught ReferenceError: hello is not defined", source:  (1)
I/chromium: [INFO:CONSOLE(1)] "Hello world 2", source:  (1)

Как я могу исправить этот код, чтобы можно было вызывать простую функцию JavaScript hello(), которая находится в отдельном файле?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Согласно CW ответ ,

Вам нужно подождать, пока ваша страница загрузится

private void helloJs(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        webView.evaluateJavascript("javascript:hello();", null);
    } else {
        webView.loadUrl("javascript:hello();");
    }
}

webView.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        helloJs();
    }
});
0 голосов
/ 28 октября 2018

Можете ли вы попробовать это

webView = (WebView)findViewById(R.id.webView);
webView.setWebViewClient(new webViewClient()); \\ added this line
webView.getSettings().setJavaScriptEnabled(true); \\ moved this line before to setting Web Chrome Client
webView.setWebChromeClient(new WebChromeClient());

webView.loadUrl("file:///android_asset/index.html");

webView.evaluateJavascript("javascript:hello();", null);
webView.evaluateJavascript("console.log('Hello world 2');", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...