Phonegap und Webworker
Ich bin versucht zu schreiben, eine PhoneGap/Cordova app.
Ich versuche zu tun, einige der mehr lange im hintergrund Laufenden Sachen Web-Arbeiter. Aber ich finde, dass einige Funktionen nicht verfügbar in der Web-worker.
navigator.connection
ist in das Haupt-Skript aber ist nicht definiert über die web-worker, das gleiche gilt für navigator.geolocation
.
Ich würde auch gerne Zugriff auf eine sql-lite-Datenbank in einem web-worker zu.
Irgendwelche Ideen, wie das zu tun hintergrund-Operationen, wie dies innerhalb von PhoneGap/Cordova?
Jede Hilfe, die jemand geben kann wäre toll.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst müssen Sie verstehen, dass der Arbeiter einen neuen thread oder Prozess, und dieser beinhaltet nicht die window-und document-Objekte.
Cordova schafft eine Schnittstelle zwischen der Webansicht und der nativen API. Wenn Sie ausführen, dass ein Arbeiter, Sie haben keinen Zugriff auf diese API-Schnittstelle, daher können Sie nicht verwenden plugins oder das cordova-Kern.
Habe ich versucht zu importieren cordova.js Skript in einen worker:
Aber es wirft einen Fehler, wenn es nicht die Fenster Objekt. Schließlich Emulation der Objekte:
Cordova Schrift wirft "ReferenceError: promp ist nicht definiert".
Auf der anderen Seite, müssen Sie verstehen, um die Kommunikation zwischen der Webansicht und der native code, der asynchron sind. Wenn Sie senden eine SQLite Abfrage zum Beispiel Ihr JavaScript-code weiterhin ausgeführt wird, wenn die Abfrage gelöst, die API sendet ein Ereignis an den WebView und Sie läuft Ihren Rückruf.
Ich benutze Arbeitnehmer zum Beispiel, um Daten zu verschlüsseln, da dieser Prozess sehr kompliziert ist und die Blockierung verursacht. Aber wenn Sie müssen, verwenden Sie cordova-plugins, die Sie nicht haben dieses problem.
Gibt es eine Erklärung um dies zu verstehen.
Für SQLite, die ich Ihnen empfehle Cordova-SQLitePlugin.
Wenn Sie Ihre eigenen hight-Prozess, können Sie lernen, wie man plugins: https://cordova.apache.org/docs/en/4.0.0/guide_hybrid_plugins_index.md.html
In der Zwischenzeit können Sie die Arbeitnehmer und das senden und empfangen von Daten, aber nicht mit Ressourcen verweist. Und beachten Sie, dass die Verwendung von apis (wie SQLite), diese wird asynchron und Sie müssen nicht zu öffnen, einem anderen Prozess, Sie zu erfüllen. Sie können nur senden das Ergebnis an einen worker und arbeiten von dort aus.
Ich würde Bildgebung, die Sie nicht passieren konnten, diejenigen, die Arbeiter mit Nachricht. So etwas wie vorgeschlagen, hier:
javascript web worker - wie finde ich Argumente?
Als für die sql-lite db sollte man in der Lage sein, um eine Verbindung einzuleiten lib aus einem worker-Skript viel die gleiche Weise würden Sie Ihre Haupt-Skript.
Erkenne ich diese Antwort kann nicht sein Kopfgeld verdient, kann aber den Einstieg in die richtige Richtung
Aufgrund der Tatsache, dass Ihre Web-worker laufen außerhalb der Haupt-application-thread-Sie haben nicht den gleichen Zugriff auf JavaScript-Funktionen als Ihre wichtigste Anwendung hat. Ihre Mitarbeiter haben keinen Zugriff auf:
Wenn Sie möchten, dass Ihre Anwendung in dem UI-thread kommunizieren mit einem Arbeitnehmer, den Sie übergeben das Objekt durch die Nachricht. Aber da Arbeiter akzeptiert
string
verwenden, können SieJSON.parse()
oderJSON.stringify()
erfolgreich das Objekt gesendet werden.