Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript apachecordova:从web视图引发事件_Javascript_Html_Cordova_Events_Notifications - Fatal编程技术网

Javascript apachecordova:从web视图引发事件

Javascript apachecordova:从web视图引发事件,javascript,html,cordova,events,notifications,Javascript,Html,Cordova,Events,Notifications,新的apache cordova开发工具 我有一个非常简单的apachecordova应用程序,它只是我的web项目的一个shell 在onDeviceReady事件中,我只做了非常简单的事情: var url = "http://www.app.com:3000/users/sign_in"; 应用程序正在运行。现在我想让我的web应用程序在手机中发出通知,所以我设想我可以从web应用程序向cordova应用程序发出HTML事件,然后让cordova应用程序使用插件向手机发出本机通知 这很好

新的apache cordova开发工具

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

在onDeviceReady事件中,我只做了非常简单的事情:

var url = "http://www.app.com:3000/users/sign_in";
应用程序正在运行。现在我想让我的web应用程序在手机中发出通知,所以我设想我可以从web应用程序向cordova应用程序发出HTML事件,然后让cordova应用程序使用插件向手机发出本机通知

这很好,因为网络不需要包含任何cordova文件,我将其与cordova技术分离。这似乎是一个很好的特权

因此,我试图从web上发送一个事件:

var customEvent = new CustomEvent("notification", { detail: { message: message, options: options }, bubbles: true });
document.dispatchEvent(customEvent);
并将其绑定到cordova应用程序上。初始化:

document.addEventListener('notification', this.onNotification.bind(this), false);
但是,当我从网络上冒泡事件时,cordova应用程序没有收到它。经过进一步研究,我发现cordova应用程序中的文档对象似乎与我的web应用程序中的文档对象并不完全相同


我的假设是这很普遍,但我环顾四周,没有发现有很多人这样做。这是否可能(从web应用程序到cordova应用程序的冒泡事件)?如果没有,我的web应用程序与cordova应用程序通信的最佳方式是什么?

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

在这个基础上,我添加了InAppBrowser插件,将我的web应用程序打开为一个空白窗口,并对其进行了配置,使其看起来全屏

    webWindow = cordova.InAppBrowser.open(url, '_blank', 'location=no,zoom=no');
之后,我发现不可能将事件从web应用程序冒泡到cordova应用程序。我尝试使用addEventListener并从web上发送事件,但无法使其正常工作

所以我结束了对它的破解:我在webWindow对象上使用了evaluateScript方法。我使用evaluateScript在web中的窗口对象上设置并检索一个变量。大约每5秒钟我轮询一次变量,如果变量上有什么内容,我会提取该值并清理变量

在web端,每当有新的通知出现时,我都会填写

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