2016-11-30 16 views
2

Ich möchte regelmäßig eine API von meinem Service Worker aufrufen, um Daten zu senden, die in localStorage gespeichert sind. Diese Daten werden in localStorage erstellt und gespeichert, wenn ein Benutzer meine Website aufruft. Betrachten Sie es als etwas wie das Speichern von Statistiken in localStorage und das regelmäßige Senden durch den Service-Mitarbeiter. Wie soll ich das machen? Ich verstehe, dass ich vom Servicemitarbeiter nicht auf localStorage zugreifen kann und die postMessage-API verwenden muss. Jede Hilfe würde sehr geschätzt werden.Zugriff auf localStorage von Service Worker

Antwort

5

Sie können nicht auf localStorage (und auch sessionStorage) von einem Webworker-Prozess zugreifen, sie werden undefined sein, dies ist aus Sicherheitsgründen.

Sie müssen postMessage() zurück zum Ursprungscode des Arbeiters verwenden und diesen Code die Daten in localStorage speichern lassen.

Verwenden Sie sollten localStorage.setItem() und localStorage.getItem() verwenden, um Daten aus dem lokalen Speicher zu speichern und abzurufen.

Mehr Infos:

Worker.postMessage()

Window.localStorage

Pseudo-Code unten, in der Hoffnung Sie beginnen zu bekommen.

// include your worker 
var myWorker = new Worker('YourWorker.js'), 
    data, 
    changeData = function() { 
    // save data to local storage 
    localStorage.setItem('data', (new Date).getTime().toString()); 
    // get data from local storage 
    data = localStorage.getItem('data'); 
    sendToWorker(); 
    }, 
    sendToWorker = function() { 
    // send data to your worker 
    myWorker.postMessage({ 
     data: data 
    }); 
    }; 
setInterval(changeData, 1000) 
+0

'var myWorker = neu YourWorker ('YourWorker.js'),'> 'neuer WebWorker' richtig? – Roberrrt

+0

@Roberrrt danke für deinen Kommentar, richtig ist 'new Worker()' :) – GibboK

+0

Danke GibboK, aber ich habe ein paar Zweifel. Der Code, den du erwähnt hast, würde in einem meiner Javascripts laufen. Und damit der Benutzer läuft, muss die Website laufen? Ist es nicht? Ich suche nach etwas, wo in der Service-Mitarbeiter regelmäßig Daten aus dem lokalen Speicher sendet, auch wenn der Benutzer nicht auf meiner Website ist. Ist mein Szenario überhaupt möglich? – Faiz