У меня есть расширение, и оно прекрасно работает:
https://chrome.google.com/webstore/detail/ux-unicorns-club/jfkbdlhcdoooljpkfjfllhlgeejhabbb
Но иногда (не могу отследить причину) у меня возникает ошибка в файле background.js, и он перестает обновлять БД:
Я гуглю несколько возможных решений, но они не дают ответов о расширении chrome и локальном хранилище и не объясняют случайную природу ошибки. Потому что, когда вы просто устанавливаете приложение, оно работает нормально, без ошибок.
Вот что я имею в файле background.js при объявлении firebase:
var config = {
apiKey: "AIzaSyBDmZsXrDi6xnUeu_fXmoHh0StKjYCthvk",
authDomain: "uxunicorns-fca1e.firebaseapp.com",
databaseURL: "https://uxunicorns-fca1e.firebaseio.com",
projectId: "uxunicorns-fca1e",
storageBucket: "uxunicorns-fca1e.appspot.com",
messageingSenderId: "752488928557"
};
var firedata;
chrome.runtime.onInstalled.addListener(function(details){
chrome.storage.sync.clear();
chrome.storage.sync.set({
'uxuicorn_show_type': 'tab',
'uxuicorn_first_time': true,
}, function() {
firebase.initializeApp(config);
firedata = firebase.database();
updatedata();
});
А это функция, которая вызывает данные из БД:
function updatedata() {
var category = [], posts = [], old_category, old_posts;
firebase.database().ref('/category').once('value').then(function(snapshot) {
var snapshotexist = snapshot.exists();
console.log(snapshotexist);
if (snapshotexist) {
snapshot.forEach(function(childSnapshot) {
category.push(childSnapshot.val())
});
firebase.database().ref('/posts').once('value').then(function(snapshot) {
var snapshotexist = snapshot.exists();
console.log(snapshotexist);
if (snapshotexist) {
snapshot.forEach(function(childSnapshot) {
posts.push(childSnapshot.val())
});
get_array_value_from_storage('uxunicorns_category', function(result) {
old_category = result;
get_array_value_from_storage('uxunicorns_posts', function(result) {
old_posts = result;
var change_count = 0;
var i, loop_count = old_category.length;
if (category.length > old_category.length) {
change_count += category.length - old_category.length;
}
for (i = 0; i < loop_count; i ++) {
if(!category_item_equal(category[i], old_category[i]))
change_count ++;
}
loop_count = old_posts.length;
if (posts.length > old_posts.length) {
change_count += posts.length - old_posts.length;
}
for (var i = 0; i < loop_count; i ++) {
if(!post_item_equal(posts[i], old_posts[i]))
change_count ++;
}
if (change_count > 0) {
set_array_value_to_storage('uxunicorns_category', category);
set_array_value_to_storage('uxunicorns_posts', posts);
chrome.browserAction.setBadgeText({text: change_count > 9 ? '9+' : ''+change_count});
}
});
});
} else console.log('no posts recived from Firebase');
});
} else console.log('no categories recived from Firebase');
});
}
setInterval(updatedata, 180000);