Создал расширение которое должно открывать последнее свернутое окно при нажатии на горячую клавишу, оно работает нормально если хотя бы одно окно открыто, но в том то и проблема что изначально задумка в том что бы открывать последнее свернутое окно даже если все окна свернуты. Можно как то решить эту проблему?
{
"manifest_version": 3,
"name": "Open Last Minimized Window",
"description": "Открывает последнее свернутое окно Chrome",
"version": "1.0",
"permissions": ["windows", "commands", "system"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_title": "Открыть последнее свернутое окно"
},
"commands": {
"open-last-window": {
"suggested_key": {
"default": "Ctrl + Shift + M"
},
"description": "Открыть последнее свернутое окно"
}
}
}
let minimizedWindowsStack = [];
// Событие для отслеживания изменения состояния окон
chrome.windows.onBoundsChanged.addListener(async(windowId) => {
const windows = await chrome.windows.getAll({ windowTypes: ["normal"] });
for (const win of windows) {
// Если окно свернуто и его нет в стеке, добавляем его
if (win.state === "minimized" && !minimizedWindowsStack.includes(win.id)) {
minimizedWindowsStack.push(win.id);
}
// Если окно больше не свернуто, удаляем его из стека
if (win.state !== "minimized" && minimizedWindowsStack.includes(win.id)) {
minimizedWindowsStack = minimizedWindowsStack.filter((id) => id !== win.id);
}
}
console.log("Обновленный стек окон:", minimizedWindowsStack); // Для отладки
});
// Функция для открытия последнего свернутого окна
async function openLastMinimizedWindow() {
if (minimizedWindowsStack.length === 0) {
console.log("Нет свернутых окон.");
return;
}
const lastMinimizedWindowId = minimizedWindowsStack.pop(); // Берём последнее окно из стека
try {
await chrome.windows.update(lastMinimizedWindowId, { state: "normal", focused: true });
console.log(`Открыто окно с ID: ${lastMinimizedWindowId}`);
} catch (error) {
console.error("Ошибка активации окна:", error);
}
}
// Обработка горячей клавиши
chrome.commands.onCommand.addListener((command) => {
console.log(`Команда получена: ${command}`); // Логируем получение команды
if (command === "open-last-window") {
console.log("Выполняем открытие последнего свернутого окна...");
openLastMinimizedWindow();
}
});
// Прием команды от popup.js
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.command === "openLastMinimized") {
openLastMinimizedWindow();
sendResponse({ success: true });
}
});
// Инициализация при старте
chrome.runtime.onStartup.addListener(async() => {
const windows = await chrome.windows.getAll({ windowTypes: ["normal"] });
minimizedWindowsStack = windows.filter((win) => win.state === "minimized").map((win) => win.id);
console.log("Инициализация стека окон:", minimizedWindowsStack);
});
// Функция для открытия последнего активного окна
async function openLastWindow() {
if (lastActiveWindowId) {
try {
await chrome.windows.update(lastActiveWindowId, { focused: true });
} catch (e) {
console.log("Ошибка при открытии окна:", e);
}
} else {
console.log("Нет данных о последнем активном окне.");
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Управление окнами</title>
</head>
<body>
<h1>Открыть последнее окно</h1>
<button id="open-last">Открыть</button>
<button id="set-shortcut">Настроить горячие клавиши</button>
<button id="reload-extension">Перезагрузить расширение</button>
<!-- Кнопка для перезагрузки -->
<script src="popup.js" defer></script>
</body>
</html>
document.getElementById("reload-extension").addEventListener("click", function() {
chrome.runtime.reload(); // Перезагружает расширение
console.log("Расширение перезагружено!");
});
// Обработчик для кнопки "Открыть"
document.getElementById("open-last").addEventListener("click", () => {
chrome.runtime.sendMessage({ command: "openLastMinimized" }, (response) => {
if (response && response.success) {
console.log("Последнее свернутое окно открыто.");
} else {
console.error("Не удалось открыть окно.");
}
});
});
// Обработчик для кнопки "Настроить горячие клавиши"
document.getElementById("set-shortcut").addEventListener("click", function() {
chrome.tabs.create({ url: "chrome://extensions/shortcuts" });
});