如何在应用恢复时在 Android WebView 中触发 javascript 事件
How to fire javascript event in Android WebView on app resume
我的 Android 应用程序中有一个 WebView,我需要 运行 一个 JavaScript 函数
- app/WebView 切换到(例如使用应用程序切换器或点击主屏幕上的图标)
- 设备从休眠状态唤醒(当设备进入休眠状态时应用程序仍在屏幕上)。
在我的网页中使用 visibilitychange
事件侦听器 java脚本仅适用于案例 1。
理想情况下,我想使用 Android onResume()
java 函数触发某种 java 脚本事件,但是如何?
您可以使用 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()
将事件变量作为参数,而不是事件名称字符串。
更多信息:Creating and dispatching events in 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) {
}
});
}
}
我的 Android 应用程序中有一个 WebView,我需要 运行 一个 JavaScript 函数
- app/WebView 切换到(例如使用应用程序切换器或点击主屏幕上的图标)
- 设备从休眠状态唤醒(当设备进入休眠状态时应用程序仍在屏幕上)。
在我的网页中使用 visibilitychange
事件侦听器 java脚本仅适用于案例 1。
理想情况下,我想使用 Android onResume()
java 函数触发某种 java 脚本事件,但是如何?
您可以使用 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()
将事件变量作为参数,而不是事件名称字符串。
更多信息:Creating and dispatching events in 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) {
}
});
}
}