Кратко обо всех инструментах расширения Chrome и моем опыте создания расширения Clean Theme.

Я был поклонником Харли Квинн из комиксов DC в течение долгого времени, и после просмотра фильма Отряд самоубийц моя одержимость вышла на новый уровень. Все, что я хотел, это начать свою повседневную жизнь с ней, по одной вкладке за раз! Итак, в моем любимом браузере Chrome появился фон в стиле моего любимого комического персонажа Харли. Но это то, что Chrome решил дать мне на моей новой вкладке. Harley покрыт логотипом Google, панелью поиска и миниатюрами [тонны и тонны ... ну, всего 8, но их было достаточно, чтобы полностью охватить Harley! :( ] Хотя я понимаю полезность этих функций, Chrome действительно должен начать учитывать субъективные предпочтения. В любом случае, отчаянные попытки очистить эту страницу положили начало моему путешествию с расширениями Chrome.

Расширение, которое я создал, Clean Theme, скрывает элементы новой вкладки Chrome по умолчанию, чтобы вы могли видеть свои фоновые темы во всей красе. Вы можете поиграть с кодом, размещенным на git. Здесь я хотел бы задокументировать несколько основных функций расширений и мой путь создания этого расширения.

Расширения Chrome — это просто!

Все, что вам нужно знать для создания расширения Chrome, — это наши базовые HTML, JS и CSS. Расширения — это простые веб-страницы, работающие в браузере и добавляющие ему дополнительные функции.

Расширения Chrome — это весело!

Лично строить расширение было действительно весело. Расширения похожи на хаки, которые мы применяем к уже существующей огромной экосистеме компонентов браузера, чтобы представить наши функции, а когда хакерство не было веселым?! :) Это позволяет вам находить творческие способы настройки тесно переплетенной сети браузера.

Расширения Chrome структурированы!

Браузер предоставляет нам определенные точки входа и API для добавления нашего расширения в свою экосистему. Знание этого может значительно сэкономить ваше время на понимание того, какие функции можно/нельзя добавить и какие шлюзы лучше всего подходят для вас. На создание расширения Clean Theme у меня ушло 4 часа, что в противном случае заняло бы 15 минут, если бы у меня были предварительные знания.

Расширения Chrome легко тестировать и отлаживать!

  1. Перейти к хром://расширения
  2. Отметьте «Режим разработчика» в правом верхнем углу.
  3. Нажмите «Загрузить распакованное расширение...» и выберите папку расширения.

Вот и все! Ваше расширение добавляется локально и может быть протестировано в вашем браузере.

Архитектура расширений

манифест.json

Это json, который предоставляет всю важную информацию о расширении (имя, версия, значки), разрешениях, которые ему потребуются от браузера, и возможностях расширения. Это файл manifest.json чистой темы.

{
  "manifest_version": 2, //version of manifest file format
  "name": "Clean Theme", 
  "short_name": "CT", 
  "version": "1.0", 
  "description": "Hides all the default google new tab elements     blocking the background theme", 
  "browser_action": {    
     "default_icon": "icon.png",    
     "default_title": "Cleans up your chrome theme!"
  },
  "content_scripts": [
     {
       "matches": [
           "*://*/_/chrome/newtab*"
        ],
        "js": [
           "content.js"
        ],
        "run_at": "document_idle"
     }
   ]
}

Другими заслуживающими внимания ключами manifest.json являются

{
  "page_action": {...},
  "background": {
    "persistent": false
  },
  "chrome_url_overrides": { //lets you override any 1 of the 3 pages
    "bookmarks": "example.html" OR
    "history": "example.html" OR
    "newtab": "example.html"
  },
  "commands": {...}, //give keyboard shortcuts to trigger actions in your extension
 
 "devtools_page": "devtools.html", //adds functionality to devtools
  "event_rules": [{...}], //add rules that intercept, block, or modify web requests
 
 "incognito": "spanning, split, or not_allowed",
  "offline_enabled": true, //enable running in offline mode
  "omnibox": { //let Google search bar send input to your extension after entering the keyword
    "keyword": "aString"
  },
 
  "permissions": ["tabs"],
}

действие_браузера

Действия в браузере позволяют поместить значок справа от адресной строки на панели инструментов. Кроме того, он может иметь подсказку, значок или всплывающее окно. Всплывающая подсказка определяется параметром default_title в файле манифеста. Значок может состоять максимум из 4 символов и может использоваться для указания состояния расширения. Всплывающее окно появляется при нажатии на значок расширения. Он задается параметром default_popup в файле манифеста и указывает на HTML-файл.

страница_действие

Действия страницы похожи в пользовательском интерфейсе на действия браузера, но используются, когда вы хотите активировать расширение на основе текущей страницы. Используйте «скрытый» API, чтобы деактивировать расширение, когда оно не требуется.

контент-скрипты

Если вы хотите взаимодействовать с содержимым веб-страницы после ее загрузки, используйте сценарии содержимого. Ключевое слово «matches» в файле манифеста указывает массив регулярных выражений URL-адресов веб-страницы, в которые должен быть внедрен скрипт содержимого. Файлы JS и CSS указываются с соответствующими ключевыми словами. Ключевое слово run_at сообщает браузеру, когда вставлять файлы. Следующие изображения диаграммы пламени демонстрируют различия.

  • document_start: файлы внедряются после всех файлов CSS, но до построения DOM или выполнения любого другого скрипта.
  • document_end: файлы внедряются сразу после создания модели DOM, но до загрузки каких-либо ресурсов, таких как изображения.
  • document_idle: файлы внедряются между document_end и сразу после срабатывания события window.onload.

фоновые страницы

Фоновые страницы — это единичные задачи, выполняемые в процессе расширения. Они выполняются в течение всего времени существования расширения и обычно используются для отслеживания изменений состояния. Другие страницы запрашивают состояние у фоновых страниц, или фоновые страницы могут уведомлять другие страницы об изменении состояния.

Хотя сценарий контента не может изменить DOM родительских страниц расширения, он всегда может отправлять/получать сообщения от родительского расширения. Фоновая страница может попросить сценарий содержимого изменить текущую DOM веб-страницы, или сценарий содержимого может уведомить фоновую страницу об элементах DOM веб-страницы или изменениях в них.

Сценарии не всегда могут потребоваться для запуска в фоновом режиме, и установка постоянного ключа в false в файле манифеста позволяет вам сделать эти фоновые сценарии управляемыми событиями.

Разрешения и API Chrome.*

Chrome.* API — это API только для Chrome, которые обеспечивают тесную интеграцию с браузером. Вы можете обнаружить такие вещи, как создание новой вкладки или изменение URL-адреса в адресной строке. Большинство этих API являются асинхронными вызовами, поэтому обязательно напишите обратные вызовы. Ключевое слово разрешений в файле манифеста запрашивает разрешения на доступ к этим API.

Чистая тема

Поскольку я хотел изменить новую вкладку, я сначала начал с «chrome_override_pages» только для того, чтобы понять, что эти страницы полностью переопределяют новую вкладку, включая фоновую тему. Затем я приступил к написанию фоновых страниц, управляемых событиями, и увидел, что эти страницы не имеют доступа к DOM веб-страницы. Это, наконец, привело меня к сценариям контента, которые могут фактически манипулировать DOM страницы, с помощью которой я получил доступ, и скрыл все нежелательные элементы, чтобы увидеть Харли во всей красе! :) Поскольку я не хотел прерывать работу с другими новыми функциями расширений вкладок, я только перехватывал каждый нежелательный элемент и скрывал его, оставляя DOM нетронутым.

Развертывание

Сожмите папку расширения в ZIP-файл, перейдите в панель разработчика и добавьте новый элемент. Стоимость первого добавления составляет единовременную стоимость установки в размере 5 долларов США. Просто следуйте инструкциям в форме, и ваше расширение будет запущено в кратчайшие сроки! :)