Разработка расширений: несоответствия чтения и записи в фоновом режиме.jsJavascript

Форум по Javascript
Ответить
Anonymous
 Разработка расширений: несоответствия чтения и записи в фоновом режиме.js

Сообщение Anonymous »


class Tab {
constructor(id, title, url, tabFavicon, lastAccessed) {
this.id = id;
this.title = title;
this.url = url;
this.tabFavicon = tabFavicon;
this.lastAccessed = lastAccessed;
}
}

chrome.runtime.onInstalled.addListener(() => {
console.log("Extension installed!");

const storedTabs = [];
chrome.tabs.query({}, (tabs) => {
tabs.forEach((tab) => {
storedTabs.push(new Tab(tab.id, tab.title, tab.url, tab.favIconUrl, tab.lastAccessed));
});

chrome.storage.sync.set({ tabs: storedTabs });
chrome.storage.sync.set({ inactivityThreshold: { hours: 0, minutes: 30 } });
});
});

// Handle tab creation
chrome.tabs.onCreated.addListener((tab) => {
chrome.storage.sync.get("tabs", (data) => {
const storedTabs = data.tabs || [];
storedTabs.push(new Tab(tab.id, tab.title || "New Tab", tab.url || "", tab.favIconUrl || "", tab.lastAccessed));

console.log("Tabs before ", storedTabs);
chrome.storage.sync.set({ tabs: storedTabs }, () => {
console.log("Tabs after ", storedTabs);
});
});
});

// Handle tab updates
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (tab.status === "complete") {
chrome.storage.sync.get("tabs", (data) => {
const storedTabs = data.tabs || [];
const updatedTabs = storedTabs.map((storedTab) => {
if (storedTab.id === tabId) {
return new Tab(tab.id, tab.title || storedTab.title, tab.url || storedTab.url, tab.favIconUrl || storedTab.tabFavicon, tab.lastAccessed);
}
return storedTab;
});

chrome.storage.sync.set({ tabs: updatedTabs }, () => {
console.log("Tabs updated: ", updatedTabs);
console.log("Tab updated: ", tab);
});
});
}
});

chrome.tabs.onActivated.addListener((activeInfo) => {
chrome.tabs.get(activeInfo.tabId, (tab) => {
chrome.storage.sync.get("tabs", (data) => {
const storedTabs = data.tabs || [];
const updatedTabs = storedTabs.map((storedTab) => {
if (storedTab.id === tab.id) {
return { ...storedTab, lastAccessed: tab.lastAccessed };
}
return storedTab;
});

chrome.storage.sync.set({ tabs: updatedTabs });
});
});
});

// Handle tab removal
chrome.tabs.onRemoved.addListener((tabId) => {
chrome.storage.sync.get("tabs", (data) => {
const storedTabs = data.tabs || [];
const remainingTabs = storedTabs.filter((storedTab) => storedTab.id !== tabId);

chrome.storage.sync.set({ tabs: remainingTabs }, () => {
console.log("Tab removed: ", tabId);
console.log(remainingTabs);
});
});
});

// Get inactivity threshold
function getInactivityThreshold() {
return new Promise((resolve) => {
chrome.storage.sync.get("inactivityThreshold", (data) => {
const inactivityThreshold = data.inactivityThreshold || { hours: 0, minutes: 30 };
const { minutes, hours } = inactivityThreshold;
resolve((minutes + hours * 60) * 60000);
});
});
}

// Setup interval
(async function setupInterval() {
const intervalTime = await getInactivityThreshold();

setInterval(() => {
// Add your periodic code here
}, intervalTime);
})();
< /code>
Проблема: когда расширение изначально установлено, все событие чтения вкладок и их написания для хранения проходит гладко, < /p>
case a: но как Вскоре, когда я создаю новую вкладку, например, нажатие на кнопку + для создания новой вкладки, событие, которое запускается, запускается, но Chrome.storage.sync.Set не записывает обновленную массив вкладок в хранилище.
case B: Эта проблема не возникает, когда я делаю «открыть в новой вкладке». Он работает нормально, а вкладка добавлена, а затем впоследствии обновляется на новый URL после завершения состояния. < /p>
Вопрос: Я хочу знать, что почему дело A не работает, но случай B делает? , но все же мой вопрос остается таким же? Почему это работает в B, а не в?

Подробнее здесь: https://stackoverflow.com/questions/793 ... kground-js
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»