Два года назад я создал множество расширений для Firefox (всего 23), также известных как надстройки. Постепенно я перешел к другим сторонним проектам и забыл о них. Недавно я получил несколько положительных отзывов о некоторых расширениях и получил уведомления по электронной почте.
Далее я хотел попрактиковаться в Vanilla JS и, как всегда, хочу сделать в нем несколько проектов. Поскольку расширения Firefox создаются с использованием HTML, CSS и Vanilla JS, они являются отличным способом попрактиковаться в Vanilla JS.
Вы можете найти все мои расширения для Firefox здесь. Итак, продолжайте и установите их.
Еще одна вещь, прежде чем мы углубимся в кодирование, в чем я должен признаться. Я потерял доступ к своей учетной записи Mozilla, в которой была включена двухэтапная аутентификация. Я потерял приложение для проверки подлинности на своем старом телефоне, а также ключи восстановления.
Итак, я не могу обновить существующие расширения. Я добавлю их все снова с некоторыми обновлениями и запишу весь процесс в блог.
Лучшее место, где можно узнать о создании расширения для firefox, — это эта ссылка на mdn. Кроме того, есть эта потрясающая серия YouTube от The Coding Train.
Мы собираемся создать Динамическую тему путешествия и опубликовать ее на сайте дополнений Mozilla. Точкой входа и самым важным файлом любого расширения является файл mainfest.json. Вы можете прочитать больше об этом здесь". В основном он содержит метаданные о расширении, а также предоставляет указатели на другие файлы в расширении.
Итак, откройте редактор кода и создайте файл mainfest.json. Поместите в него содержимое ниже.
Самое главное в файле mainfest.json — это фоновый сценарий. Этот скрипт очень важен для этого плагина, так как нам нужно постоянно запускать его в фоновом режиме, чтобы проверять время пользователя и менять тему. Подробнее о фоновых скриптах можно прочитать здесь.
Итак, создайте в папке файл background.js. Сначала просто добавьте в него журнал консоли, так как нам нужно проверить, работает ли он.
Затем откройте браузер Firefox и введите указанный ниже URL. После этого нажмите кнопку Загрузить временную надстройку….
about:debugging#/runtime/this-firefox
После этого перейдите в свою папку и щелкните файл mainfest.json.
Далее загружается наше расширение, поэтому нажмите кнопку Проверить.
И мы получим лог консоли в новой вкладке. Обратите внимание, что фоновый скрипт не показывает журнал в консоли браузера.
Давайте обновим background.js, чтобы добавить прослушиватель событий. Мы сделаем это с помощью browser.alarms.onAlarm. Вы можете прочитать больше об этом здесь".
Теперь мы запускаем функцию checkTime() каждые 5 минут с помощью browser.alarms.create. Вы можете прочитать больше об этом здесь".
Мы также вызываем функцию checkTime() сначала один раз, так как нам нужно показать нашу тему, когда расширение запускается в первый раз.
Снова перейдите к расширению и нажмите кнопку Обновить, чтобы новые изменения вступили в силу.
Теперь нажмите кнопку Загрузить временную надстройку…, и внутренний журнал checkTime будет увеличиваться каждые 5 минут.
Далее давайте обновим нашу функцию checkTime(), чтобы получить часы, а затем передаем часы новой функции setTheme().
Теперь функция setTheme() использует browser.theme для обновления темы. Вы можете прочитать больше об этом здесь".
Далее нам нужно создать объект темы, в котором будет передаваться каждая тема.
var currentTheme = ''; const themes = { 'travel0': { images: { theme_frame: 'sun.jpg', }, colors: { frame: '#CF723F', tab_background_text: '#111', } }, 'travel1': { images: { theme_frame: 'travel1.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel2': { images: { theme_frame: 'travel2.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel3': { images: { theme_frame: 'travel3.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel4': { images: { theme_frame: 'travel4.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel5': { images: { theme_frame: 'travel5.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel6': { images: { theme_frame: 'travel6.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel7': { images: { theme_frame: 'travel7.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel8': { images: { theme_frame: 'travel8.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel9': { images: { theme_frame: 'travel9.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel10': { images: { theme_frame: 'travel10.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel11': { images: { theme_frame: 'travel11.jpeg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel12': { images: { theme_frame: 'travel12.jpeg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel13': { images: { theme_frame: 'travel13.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel14': { images: { theme_frame: 'travel14.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel15': { images: { theme_frame: 'travel15.png', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel16': { images: { theme_frame: 'travel16.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel17': { images: { theme_frame: 'travel17.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel18': { images: { theme_frame: 'travel15.jpeg', }, colors: { frame: '#CF723F', tab_background_text: 'black', } }, 'travel19': { images: { theme_frame: 'travel19.jpeg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel20': { images: { theme_frame: 'travel20.png', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel21': { images: { theme_frame: 'travel21.jpg', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel22': { images: { theme_frame: 'travel22.png', }, colors: { frame: '#CF723F', tab_background_text: 'white', } }, 'travel23': { images: { theme_frame: 'moon.jpg', }, colors: { frame: '#000', tab_background_text: '#fff', } } };
Затем добавьте все изображения в папку.
Теперь, когда вы перезагружаете расширение, тема загружается в зависимости от часа.
Мы закончили с расширением, но давайте добавим несколько значков перед публикацией на сайте дополнений Mozilla. Обновите приведенный ниже файл manifest.json, а также добавьте значки папок, содержащие эти значки.
Нам нужно опубликовать это расширение, но, поскольку этот пост становится длиннее, мы сделаем это в следующем посте.
Вы можете найти код этого расширения здесь. Вторую часть сериала можно найти здесь.