我正在開發一個chrome擴展,其設置(基本上是兩個標記)在chrome本地存儲中保存。我可以保存和檢索保存的設置選項頁這樣的罰款:Chrome擴展等待設置被加載到事件處理程序中
節省:
function save_options() {
var checkbox1checked = $("#checkbox1").prop("checked");
var checkbox2checked = $("#checkbox2").prop("checked");
chrome.storage.sync.set({
checkbox1: checkbox1checked,
checkbox2: checkbox2checked
}, function() {
$("#status").text("Settings saved.");
window.setTimeout(function() {
$("#status").text("");
}, 2000);
});
}
檢索:
function restore_options() {
chrome.storage.sync.get({
checkbox1: true,
checkbox2: false
}, function(items) {
$("#checkbox1").prop("checked", items.checkbox1);
$("#checkbox2").prop("checked", items.checkbox2);
});
}
然後在我的內容腳本我寫了一個函數來檢索像這樣的設置:
var checkbox1Checked = true;
var checkbox2Checked = false;
function getSettings() {
chrome.storage.sync.get({
checkbox1: true,
checkbox2: false
}, function(items) {
checkbox1Checked = items.checkbox1;
checkbox2Checked = items.checkbox2;
});
}
而且我正在添加一個'pas te'event like:
window.addEventListener('paste', handlePaste, true);
而在handlePaste函數中,我調用了getSettings()函數。但問題是,事件的進一步邏輯根據擴展設置決定事件是否應該被取消。
我的邏輯是在getSettings()調用之後,但顯然它在變量初始化爲更新的值之前運行,因爲我只能從第二次發生的粘貼事件中看到正確的功能。
所以我正在尋找一種方式來以某種方式等待設置被加載,然後繼續執行事件處理程序。我已經試過的東西:
我試圖在設置檢索的回調中編寫我的邏輯。但是這不起作用,因爲處理函數在註冊回調之後返回,並且在異步操作正在進行時其他處理程序繼續運行,從而使事件取消以後不可能。
我試圖等待設置加載window.setTimeout和其他類似的解決方案,無濟於事。
當我保存設置時,我可能會從選項頁面向內容腳本運行的所有頁面發送某種消息,讓他們現在瞭解更改後的設置。我還沒有試圖實現這一點,我不確定這是否可能。
我試圖以某種方式克隆事件,然後取消它,當設置被加載時,如果需要重新啓動克隆的事件。但是,首先克隆粘貼事件時遇到困難。
我應該如何解決這個問題?任何幫助非常感謝,請記住,這是我的第一個Chrome擴展程序(我正在開發個人使用)。
謝謝,這正是我一直在尋找的。完美的作品。爲了使其正常工作,我必須進行一次小修改: 「chrome.storage.sync.onChanged.addListener」 - >「chrome.storage.onChanged.addListener」。 –