如何在Android WebView应用恢复时触发JavaScript事件

8
我在我的Android应用程序中有一个WebView,我需要在以下情况下运行JavaScript函数:
  1. 应用程序/ WebView被切换(例如使用应用程序切换器或从主屏幕点击图标)
  2. 设备从睡眠中醒来(当设备进入睡眠状态时,应用程序仍然在屏幕上)。
在我的网页JavaScript中使用visibilitychange事件监听器只适用于第一种情况。
理想情况下,我想使用Android的onResume() Java函数触发某种JavaScript事件,但如何实现?
1个回答

7
你可以使用WebView evaluateJavascript() 方法来实现此功能。
首先,你需要在网页的 JavaScript 中创建一个事件,并添加事件处理程序:
window.appResumeEvent = new Event('appresume');

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

function yourFunction() {…}

重要的是你需要在全局范围内设置应用程序恢复事件(可以通过将其设置为window的属性来实现)。
现在,在你的Android onResume()方法中,运行evaluateJavascript()方法:
@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) {

            }
        });
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接