Расширения без интерфейса

Начнем с самого простого – расширений, у которых нет интерфейса.
  • В чем их суть: это нано-продукты, которые выполняют простейшее действие при клике на иконку расширения. Действие также может выполняться по клику на пункт расширения в контекстном меню (которое открывается правой кнопкой мыши).
  • Когда выбирать такую реализацию: в случае, если у вас 1 элементарная функция, весь интерфейс которой – это клик по одной кнопке.
  • Реальные примеры продуктов из CWS:
    • Reopen Closed Tab – нажимаем на иконку расширения, расширение открывает последнюю закрытую вкладку:
      • notion image
    • Right Click Enable – нажимаем на иконку расширения, расширение активирует копирование текста правой кнопкой мыши на тех сайтах, где это действие заблокировано:
      • notion image

Создаем sample-расширение

Попробуем сделать такое расширение. Их реализация очень, что их можно даже сделать через ChatGPT-4. Так и поступим.
  1. Сделаем расширение, которое открывает последнюю закрытую вкладку в браузере через клик в контекстном меню или по клику на иконку расширения (так называемый browser action).
    1. Не забываем просить ChatGPT писать расширение на manifest v3. Ниже пример промпта:
      code chrome extension (manifest v3), that opens last closed tab by clicking in context menu or by clicking on extension icon.
  1. ChatGPT неплохо справился с задачей и выдал 2 готовых файла, которые нужно просто добавить в пустую папку:
    1. { "manifest_version": 3, "name": "Reopen Last Closed Tab", "version": "1.0", "description": "Reopens the last closed tab when clicked on the icon or the context menu.", "permissions": [ "tabs", "contextMenus", "sessions" ], "background": { "service_worker": "background.js" }, "action": { "default_popup": "", "default_title": "Reopen Last Closed Tab" } }
      manifest.json
      chrome.runtime.onInstalled.addListener(() => { chrome.contextMenus.create({ id: "reopenLastClosed", title: "Reopen Last Closed Tab", contexts: ["all"] }); }); chrome.contextMenus.onClicked.addListener((info) => { if (info.menuItemId === "reopenLastClosed") { reopenLastClosedTab(); } }); chrome.action.onClicked.addListener((tab) => { reopenLastClosedTab(); }); function reopenLastClosedTab() { chrome.sessions.restore(null, (session) => { if (chrome.runtime.lastError) { console.error(`Error restoring session: ${chrome.runtime.lastError.message}`); } else if (session) { console.log('Session restored:', session); } else { console.log('No session to restore!'); } }); }
      background.js
  1. Расширение из 2 файлов готово:
    1. notion image
  1. Загружаем расширение в браузер в режиме разработчика и пробуем кликнуть по иконке расширения или по пункту в контекстном меню. Открывается последняя закрытая вкладка. То есть все работает:
    1. notion image