Apache Cordova:从 Web 视图引发事件



new apache cordova dev here.

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

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

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

该应用程序正在运行。现在我希望我的 Web 应用程序在手机中引发通知,所以我想象我可以将 HTML 事件从我的 Web 应用程序引发到 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 应用程序通信的最佳方式是什么?

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

在此基础上,我添加了 InAppBrowser 插件,并将我的 Web 应用程序作为_blank窗口打开并对其进行配置,使其看起来全屏显示。

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

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

所以我结束了对它的黑客攻击:我在webWindow对象上使用了evaluateScript方法。使用 evaluateScript 我在 Web 中的窗口对象上设置并检索了一个变量。每隔 5 秒左右,我轮询一次变量,如果上面有东西,我会提取值并清理变量。

在网络方面,每次有新通知到来时,我都会填写它。

这是次优的,但这是我能做的最好的。它具有拥有非常薄的科尔多瓦应用程序的巨大优势,我几乎可以忘记它。它是免费移动的。

最新更新