2016-07-24 9 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

は、JSON応答からupdatedタイムスタンプを保存するためにlocalStorageの使用を検討してください。 Chrome拡張機能では、chrome.alarms.createを使用して関数を繰り返し呼び出すことができるため、JSONのタイムスタンプがlocalStorageのものと同じでないかどうかを評価する間隔(1分に1回)を確認できます。

スクリプト内の条件で、localStorageキーが存在するかどうかを確認できます。 が存在しない場合は、作成し、JSONレスポンスのタイムスタンプに設定します。スクリプトが実行されたのは初めてのことで、次回に火災が発生したときに利用可能になります。

の場合、スクリプトはローカルに保存された値とその後のJSON要求のupdatedタイムスタンプを比較できます。両者が一致する場合、更新はありませんでした。それらが異なる場合、更新があり、バッジを表示する/あなたが望む他のアクションを取ることができます。ここで

は、これを実現するための一つの方法の例です:localStorage

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

詳細情報:Google Chrome拡張機能APIでalarmshttps://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

詳細情報:https://developer.chrome.com/apps/alarms

関連する問題