从Android触发JavaScript事件

前端之家收集整理的这篇文章主要介绍了从Android触发JavaScript事件 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我创建了一个cordova应用程序.我正在运行后台服务以在应用程序中执行某些本机任务.后台服务完成其任务后,我需要触发一个Java脚本事件.是否可以从android触发js事件?找不到任何可靠的答案.我需要事件,因为应用程序正在等待后台服务中的任务完成.我想事件通知应用程序该任务已完成.有没有更好的方法来实现此逻辑?

最佳答案
Cordova本身不会公开公开其Webview属性供其他Java类使用,但是您可以使用最小的Cordova插件来做到这一点,该插件将允许您的后台服务访问Cordova Webview以便从Java层中执行JavaScript.这只是注入JS触发事件的问题.

首先,您将创建一个Cordova插件,以将Cordova的必要元素公开给后台服务:

public class MyPlugin extends CordovaPlugin{
    private static final String TAG = "MyPlugin";
    static MyPlugin instance = null;
    static CordovaWebView cordovaWebView;
    static CordovaInterface cordovaInterface;

    @Override
    public void initialize(CordovaInterface cordova,CordovaWebView webView) {
        super.initialize(cordova,webView);

        instance = this;
        cordovaWebView = webView;
        cordovaInterface = cordova;
    }

    @Override
    public void onDestroy() {
        instance = null;
    }

    private static void executeGlobalJavascript(final String jsString) {
        if (instance == null) {return;}
        instance.cordovaInterface.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    instance.cordovaWebView.loadUrl("javascript:" + jsString);
                } catch (Exception e) {
                    Log.e(TAG,"Error executing javascript: "+ e.toString());
                }
            }
        });
    }

    public static void triggerJavascriptEvent(final String eventName){
        executeGlobalJavascript(String.format("document.dispatchEvent(new Event('%s'));",eventName));
    }
}

然后,您的后台服务可以调用插件类公开的公共方法

public class MyService {
    public static void myMethod(){
        MyPlugin.triggerJavascriptEvent("myserviceevent");
    }
}

最后,在您的Cordova应用程序的JS层中,您将监听自定义事件:

document.addEventListener('myserviceevent',function(){
    console.log("myserviceevent received");
},false);

我创建了一个示例Cordova项目,其中包含实现此目标所需的最少自定义插件,您可以在此处下载:http://ge.tt/8UeL6lu2

下载后,解压缩然后:

cd cordova-test
cordova platform add android
cordova run android

猜你在找的JavaScript相关文章