我的安卓应用程序中有一个WebView,我需要在任何时候运行JavaScript函数
在我的网页javascript中使用visibilitychange
事件侦听器只适用于第一种情况。
理想情况下,我希望使用Android onResume()
java函数来触发某种javascript事件,但是如何触发呢?
发布于 2018-09-22 08:18:41
您可以使用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)
有关我的完整代码片段,请单击show 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) {
}
});
}
}
https://stackoverflow.com/questions/52452246
复制相似问题