Cordova Phonegap与网络工作者

Cordova Phonegap与网络工作者,cordova,phonegap-build,web-worker,Cordova,Phonegap Build,Web Worker,我正在尝试编写PhoneGap/Cordova应用程序 我正试图在网络工作者中做一些更长期的背景工作。然而,我发现有些功能在Web工作者中是不可用的 navigator.connection在主脚本中可用,但在web worker中未定义,这同样适用于navigator.geolocation 我还想从web worker中访问SQLLite数据库 关于如何在PhoneGap/Cordova中进行这样的后台操作,有什么想法吗 任何人能给予的任何帮助都将是伟大的。我想你可以将这些信息传递给工人。这

我正在尝试编写PhoneGap/Cordova应用程序

我正试图在网络工作者中做一些更长期的背景工作。然而,我发现有些功能在Web工作者中是不可用的

navigator.connection
在主脚本中可用,但在web worker中未定义,这同样适用于
navigator.geolocation

我还想从web worker中访问SQLLite数据库

关于如何在PhoneGap/Cordova中进行这样的后台操作,有什么想法吗


任何人能给予的任何帮助都将是伟大的。

我想你可以将这些信息传递给工人。这里有这样的建议:

对于SQLLiteDB,您应该能够从辅助脚本中初始化连接库,与主脚本的初始化方式大致相同


我意识到这个答案可能不值得赏金,但可能会让您朝着正确的方向开始

首先,您需要了解Worker是一个新线程或进程,这不包括窗口和文档对象

Cordova在webview和本机API之间创建接口。如果您在worker中运行,则无法访问此API接口,因此无法使用插件或cordova core

我尝试将cordova.js脚本导入到worker中:

loadScript('../cordova.js');
但是当它找不到窗口对象时会抛出一个错误。最后,模拟对象:

self.window = this;
self.window.document = this;
loadScript('../cordova.js');
cordova的脚本抛出“ReferenceError:promp未定义”

另一方面,您需要理解,WebView和本机代码之间的通信是异步的。例如,如果您发送一个SQLite查询,您的JavaScript代码将继续运行,当查询被解析时,API将向WebView发送一个事件,您将运行回调

例如,我使用worker来加密数据,因为这个过程太难,会导致阻塞。但是如果你需要使用cordova插件,你就不会有这个问题

有一个解释

对于SQLite,我建议您使用

如果您需要自己的hight流程,您可以学习如何制作插件:


同时,您可以使用worker并发送和接收数据,但不能使用资源引用。请注意,使用API(如SQLite),这将是异步的,您不需要打开另一个进程来执行它们。您只需将结果发送给一个工作线程,然后从那里开始工作。

由于您的Web工作线程在主应用程序线程之外运行,因此它们对JavaScript功能的访问权限与主应用程序不同。您的员工无权访问:

  • 大教堂
  • 文档对象
  • 窗口对象
  • 父对象

如果希望UI线程中的应用程序与工作者通信,则需要通过消息传递对象。但是,由于worker接受
string
,您可以使用
JSON.parse()
JSON.stringify()
成功发送对象。

您好,感谢您的建议,这不适用于我需要的目的,因为这将在当前状态下传递值。如果将navigator.connection传递给WebWorker,则当它在主线程中更改时,它在worker中不会更改。我还没有尝试过使用SQLlite对象,但我怀疑传递这个也会有问题,我会尝试一下,然后再给你回复。再次感谢您的建议。@neox“如果将navigator.connection传递给WebWorker,则当它在主线程中更改时,navigator.connection不会在worker中更改”这是真的:worker和主线程之间没有任何共享对象。每件事都必须通过明确的信息进行沟通。谢谢你的深思熟虑的回答和推荐信。你的英语还不错,尤其是考虑到我们对一个特定的主题使用了复杂的术语。赏金是你的!