2016-07-24 45 views
0

我正在開發一款Chrome擴展程序,用於在學區顯示重要通告的教師在彈出窗口中使用。 I'm using a published Google Spreadsheet to create a JSON feed jQuery在後臺腳本中解析。檢查JSON是否已更新新數據

我想在電子表格中的數據更改時向擴展名圖標添加徽章,但我不知道如何檢查JSON是否已更新。來自Google的JSON有一個日期散列(data.feed.updated.$t),我認爲這是一條路,但我不知道它使用什麼格式。

如何在我的windowPopup.js腳本中編寫條件if以檢查數據是否已更新?

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

這是一個非常真棒庫做json比較:https://github.com/benjamine/jsondiffpatch – Enkode

回答

0

考慮使用localStorage保存從JSON響應updated時間戳。 Chrome擴展程序可以使用chrome.alarms.create反覆調用某個功能,因此您可以檢查間隔(例如,每分鐘一次)以評估您的JSON時間戳是否與localStorage中的時間戳不同。

您的腳本中的條件可以檢查是否存在localStorage密鑰。如果不存在,請創建它並將其設置爲JSON響應的時間戳。這是腳本第一次執行,並且在下一次你創建火災時它將可用。

如果它確實存在,那麼腳本可以將本地存儲的值與後續JSON請求上的updated時間戳進行比較。如果兩者匹配,則沒有更新。如果它們不同,則會有更新,您可以顯示徽章/採取任何其他您想要的操作。

這裏是一種方式的示例來實現:

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(); 
}); 

更多信息localStoragehttps://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

更多的谷歌Chrome擴展API在alarms信息:https://developer.chrome.com/apps/alarms

相關問題