首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在应用简历上触发Android WebView中的javascript事件

如何在应用简历上触发Android WebView中的javascript事件
EN

Stack Overflow用户
提问于 2018-09-22 07:47:08
回答 1查看 8.8K关注 0票数 3

我的安卓应用程序中有一个WebView,我需要在任何时候运行JavaScript函数

  1. 将应用程序/WebView切换到(例如,使用应用程序切换器或轻触主屏幕上的图标)
  2. 设备从睡眠状态唤醒(当设备进入睡眠状态时,应用程序仍在屏幕上)。

在我的网页javascript中使用visibilitychange事件侦听器只适用于第一种情况。

理想情况下,我希望使用Android onResume() java函数来触发某种javascript事件,但是如何触发呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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) {

            }
        });
    }
}

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52452246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档