android js点击事件,从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

标签:cordova,android-webview,javascript,android,cordovawebview

来源: https://codeday.me/bug/20191211/2105986.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值