2015-10-15 207 views
0

清單的「背景」部分中的persistent = false意味着該後臺頁面可以從內存中卸載並稍後再次啓動。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 nge:

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)一次,然後執行主要操作。 – user64675

+0

你可以發佈更多的代碼部分,它仍然有點困惑,試圖幫助 – James

相關問題