2016-07-24 15 views
0

Ich arbeite an einer Chrome-Erweiterung für Lehrer in einem Schulbezirk, die wichtige Ankündigungen in einem Popup-Fenster anzeigt. I'm using a published Google Spreadsheet to create a JSON feed von jQuery im Hintergrundskript analysiert.Überprüfen, ob JSON mit neuen Daten aktualisiert wurde

Ich möchte dem Erweiterungssymbol ein Symbol hinzufügen, wenn die Daten in der Tabelle geändert werden, aber ich habe keine Ahnung, wie überprüft werden kann, ob JSON aktualisiert wurde. Das JSON von Google hat einen Datums-Hash (data.feed.updated.$t) und ich denke, das ist der Weg zu gehen, aber ich kann nicht sagen, welche Formatierung es verwendet.

Wie sollte ich die bedingte if in meinem windowPopup.js Skript schreiben, um zu überprüfen, ob die Daten aktualisiert wurden?

windowPopup.js

$(document).ready(function() { 
    var d = new Date(); 
    var month = d.getMonth()+1; 
    var day = d.getDate(); 
    var output = (month<10 ? '0' : '') + month + '/' + (day<10 ? '0' : '') + day + '/' + d.getFullYear(); 
    $('#date').append('<h1>'+output+'</h1>'); 

    var spreadsheetId = "10j8Ycax02XMkVWMK1v-aYJMHoOjQaLRFuZUOKZEY9nA"; 

    var url = "https://spreadsheets.google.com/feeds/list/" + spreadsheetId + "/od6/public/values?alt=json"; 

    $.getJSON(url, function(data) { 
    var entry = data.feed.entry; 

    $(entry).each(function() { 
     $('.data').append('<h2>'+this.gsx$title.$t+'</h2><p>'+this.gsx$text.$t+'</p>'); 
    }); 

    console.log(data.feed.updated.$t); 
    console.log(d); 

    // I'm not sure how to check if the data has been updated 
    // Currently, these will never match, so it's always badged. 

    if(d != data.feed.updated.$t) { 
     chrome.browserAction.setBadgeText({ 
     text: "!" 
     }); 
    } 
    }); 
}); 
+0

Dies ist ein ziemlich geniale Bibliothek für JSON-Vergleiche: https://github.com/benjamine/jsondiffpatch – Enkode

Antwort

0

Betrachten localStorage mit dem updated Zeitstempel aus der JSON-Antwort zu speichern. Chrome-Erweiterungen können wiederholt eine Funktion unter Verwendung von chrome.alarms.create aufrufen, sodass Sie nach einem Intervall (z. B. einmal pro Minute) prüfen können, ob Ihr JSON-Zeitstempel nicht mit dem in localStorage identisch ist.

Die Bedingung in Ihrem Skript könnte dann prüfen, ob ein Schlüssel localStorage existiert. Wenn es nicht vorhanden ist, erstellen Sie es und legen Sie es aus der JSON-Antwort auf den Zeitstempel fest. Es war das erste Mal, dass das Skript ausgeführt wurde, und es wird das nächste Mal verfügbar sein, wenn die alarm Brände erstellen.

Wenn vorhanden ist, könnte Ihr Skript den lokal gespeicherten Wert mit dem Zeitstempel updated bei nachfolgenden JSON-Anforderungen vergleichen. Wenn die beiden übereinstimmen, wurde kein Update durchgeführt. Wenn sie sich unterscheiden, gibt es ein Update und Sie können ein Abzeichen anzeigen/andere Aktionen ausführen, die Sie möchten.

Hier ist ein Beispiel für eine Art und Weise, dies zu erreichen:

function isUpdated(jsonTimestamp) { 
    var storedTimestamp = localStorage.getItem("last-updated"); 
    if (storedTimestamp === null) { 
    localStorage.setItem("last-updated", jsonTimestamp); 
    return false; 
    } 

    if (storedTimestamp === jsonTimestamp) { 
    return false; 
    } else { 
    localStorage.setItem("last-updated", jsonTimestamp); 
    return true; 
    } 
} 

function checkJsonFeed() { 
    $.getJSON(url, function(data) { 
    var entry = data.feed.entry; 

    $(entry).each(function() { 
     $('.data').append('<h2>'+this.gsx$title.$t+'</h2><p>'+this.gsx$text.$t+'</p>'); 
    }); 

    if (isUpdated(data.feed.updated.$t)) { 
     chrome.browserAction.setBadgeText({ 
     text: "!" 
     }); 
    } 
} 

checkJsonFeed(); 
chrome.alarms.create(
    "checkJsonFeed", 
    { 
    delayInMinutes: 1, 
    periodInMinutes: 1 
    } 
); 

chrome.alarms.onAlarm.addListener(function(alarm) { 
    checkJsonFeed(); 
}); 

Mehr Informationen über localStorage: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

Mehr Informationen über alarms in der Google Chrome-Erweiterung API: https://developer.chrome.com/apps/alarms

Verwandte Themen