2015-10-15 4 views
0

persistent = false в разделе «background» манифеста означает, что фоновая страница может быть выгружена из памяти и запущена позже.Расширения Chrome - runtime.onStartup перед любыми другими действиями

У меня есть переменная, которую мне нужно сохранить при загрузке и разгрузке фоновой страницы и браузера. Я в порядке, я могу использовать localStorage или chrome.storage.sync/local.

Но мне нужно изменить эту переменную при запуске браузера. И мне нужно сделать это перед любыми другими действиями.

Итак, мой код:

chrome.runtime.onStartup.addListener(function() { 
    localStorage.setItem("variable", 0); 
}); 
//main actions: 
var my_var = localStorage.getItem("variable"); 
my_var += 3; 
localStorage.setItem("variable", my_var); 

мне нужно запустить chrome.runtime.onStartup перед основными действиями, но я не могу, потому что событие chrome.runtime.onStartup может стрелять после того, как основные действия.

Основные действия будут выполняться каждый раз, когда фоновая страница будет загружена в память из-за persistent = false.

ответ

1

Используйте chrome.alarms API для установки немедленно выполненного аварийного сигнала; его обратный вызов будет поставлен в очередь сразу после onStartup:

  • event.js:

    chrome.runtime.onStartup.addListener(function() { 
        console.log("startup"); 
        localStorage.variable = 0; 
    }); 
    
    chrome.alarms.create("main", {when: Date.now()}); 
    chrome.alarms.onAlarm.addListener(function(alarm) { 
        console.log("execute"); 
        if (alarm.name == "main") { 
         mainCode(); 
        } 
    }); 
    
    function mainCode() { 
        ................... 
        ................... 
    } 
    
  • manifest.json:

    "permissions": ["alarms"], 
    
-1

Я еще немного запутался , и исправьте меня, если я ошибаюсь: после запуска вы должны запускать функции синхронизации, тогда я думаю, вам нужно сделать следующий cha Нг:

chrome.runtime.onStartup.addListener(function() { 

    //chrome.runtime.onStartup finished 

    //disable 
    //localStorage.setItem("variable", 0); 

    //main actions: 
    var my_var = localStorage.getItem("variable"); 
    my_var += 3; 
    localStorage.setItem("variable", my_var); 
}); 

Запустите chrome.runtime.onStartup перед любым другим кодом.

+0

К сожалению, я не могу использовать код, который вы написали. Потому что мне нужно выполнять основные действия каждый раз, когда фоновая страница загружается в память (как я уже сказал, постоянный - это ложь). – user64675

+0

И мне нужно запустить localStorage.setItem («variable», 0) только один раз, когда браузер запустится, а THEN выполнит основные действия. – user64675

+0

Вы можете разместить больше частей кода, но все же немного запутались, пытаясь помочь – James

Смежные вопросы