Как запустить событие JavaScript в Android WebView при возобновлении работы приложения - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть WebView в моем приложении для Android, и мне нужно запускать функцию JavaScript всякий раз, когда

  1. , на которое переключается приложение / WebView (например, с помощью переключателя приложений или касания значка из домаэкран)
  2. устройство выходит из спящего режима (приложение все еще находилось на экране, когда устройство переходило в спящий режим).

Использование visibilitychange прослушиватель событий на моей веб-странице javascript работает только для случая 1.

В идеале я хотел бы вызвать какое-то событие javascript, используя java-функцию Android onResume(), но как?

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете сделать это, используя метод WebView )" rel="nofollow noreferrer">evaluateJavascript().

Прежде всего вам необходимо создать событие в JavaScript веб-страницы и добавить обработчик события:

window.appResumeEvent = new Event('appresume');

window.addEventListener('appresume', yourFunction, false);

function yourFunction() {…}

Важно, чтобы вы установили событие возобновления приложения в глобальной области видимости (этого можно достичь, установив его как свойство window).

Теперь в вашем Android onResume() method, запустите evaluateJavascript() method:

@Override
protected void onResume() {
    super.onResume();
    mainWebView.evaluateJavascript("(function() { window.dispatchEvent(appResumeEvent); })();", new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String value) {

        }
    });
}

Обратите внимание, что javascript должен быть заключен в немедленно вызванное выражение функции.Также обратите внимание, что dispatchEvent() принимает переменную события в качестве аргумента, а не строку имени события.

Дополнительная информация: Создание и отправка событий в javascript (MDN)

Длямой полный MainActivity.java фрагмент изображения клика:

import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView mainWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainWebView = findViewById(R.id.activity_main_webview);
        mainWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = mainWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        mainWebView.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    protected void onResume() {
        super.onResume();
        mainWebView.evaluateJavascript("(function() { window.dispatchEvent(appResumeEvent); })();", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {

            }
        });
    }
}
...