Apache Cordova:从网络视图中提升事件

时间:2018-06-10 08:23:25

标签: javascript html5 cordova events notifications

新的apache cordova dev。

我有一个非常简单的apache cordova应用程序,它只是我的web项目的shell。

在onDeviceReady事件中,我只是非常简单地执行:

var url = "http://www.app.com:3000/users/sign_in";

该应用正常运作。现在我希望我的网络应用程序在手机中发出通知,所以我想我可以从我的网络应用程序向cordova应用程序引发HTML事件,然后让cordova应用程序使用插件向手机发出本机通知。

这很好,因为网络不必包含任何cordova文件,我将它与cordova技术分开。这似乎是一个很好的振作。

所以我试图从网上发送一个事件:

var customEvent = new CustomEvent("notification", { detail: { message: message, options: options }, bubbles: true });
document.dispatchEvent(customEvent);

并将其绑定在cordova app.initialize上:

document.addEventListener('notification', this.onNotification.bind(this), false);

但是,当我从网上冒泡这个事件时,cordova应用程序没有收到它。经过进一步研究,我发现cordova应用程序中的文档对象似乎与我的Web应用程序中的文档对象不完全相同。

我的推测是这很常见,但我环顾四周,找不到很多人这样做。这是可能的(从Web应用程序到cordova应用程序的冒泡事件)?如果没有,我的网络应用程序与我的cordova应用程序通信的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

我发现,当使用window.location.href重定向本地窗口时,您会丢失本地DOM,并且基本上您在应用程序中所做的所有操作都会被忽略。

开始以此为基础,我添加了InAppBrowser插件,并以_blank窗口的形式打开了我的网络应用,并对其进行了配置,使其看起来全屏显示。

    webWindow = cordova.InAppBrowser.open(url, '_blank', 'location=no,zoom=no');

此后,我发现不可能将事件从Web应用程序冒泡到cordova应用程序。我尝试使用addEventListener并从Web调度事件,但无法使其正常工作。

因此,我结束了自己的尝试:我在webWindow对象上使用了validateScript方法。使用评估脚本,我在Web的窗口对象上设置和检索变量。每隔约5秒钟,我会轮询一次变量,如果变量上有内容,我会拉取值并清理变量。

在网络上,每次收到新通知时,我都会填写。

这不是最理想的,但这是我能做的最好的。它拥有一个非常薄的cordova应用程序的巨大优势,我几乎可以忘记它。它是免费的移动设备。