Перейти к содержимому

Как загрузить свое расширение в google chrome

  • автор:

Создаём расширения для Google Chrome

Можно не только устанавливать готовые расширения для браузера Chrome, но и создавать собственные.

Список установленных расширений можно увидеть по адресу chrome://extensions/. Если вы забудете адрес, то можно открыть эту страницу через меню More tools | Extensions (в англ. версии).

Домашняя страница для подписанных расширений — https://chrome.google.com/webstore/category/extensions

При создании расширения используются технологии HTML, CSS, JavaScript, а также иногда JSON.

Создание первого расширения

На основе книги Introduction to Google Chrome Extensions.

Создадим первое собственное расширение ShowTime, которое добавит кнопку (Browser-Action button) на панель браузера. При щелчке откроется всплывающее окно, в котором будет отображаться текущее время и дата.

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

Для первого примера понадобятся файлы popup.html, popup_script.js, icon.png (несколько версий), manifest.json.

Внутри файла manifest.json размещаются обязательные и необязательные параметры.

К числу обязательных относятся параметры manifest_version, name, version.

Параметр manifest_version указывает на версию манифеста и должно содержать целочисленное значение больше 0. На данный момент актуальной считается версия 2. Параметр name указывает на имя расширения в виде строки. К параметру name можно добавить дополнительный атрибут description для описания расширения. Параметр version указывает на версию расширения в виде строки, которая должна содержать число.

Если мы хотим добавить кнопку на панель браузера, то в манифесте следует прописать данное поведение. Кнопка имеет название Browser-Action и в манифесте прописывается как browser_action с необходимыми атрибутами.

Пропишем данные в манифесте.

 < "manifest_version" : 2, "name" : "ShowTime", "description" : "Extension to show the current time and date", "version" : "1.2", "browser_action" : < "default_title" : "ShowTime", // в т.ч. подсказка при наведении мыши "default_icon" : "icon.png", // значок на панели "default_popup" : "popup.html" >, "icons" : < "16" : "icon16.png", //Used as the favicon for an extension's pages "48" : "icon48.png", //Used on the extension management page "128" : "icon128.png" //Used during installation & in the Chrome Web Store >> 

С манифестом разобрались. Теперь можно написать код для расширения. Для этого используется стандартный JavaScript. Откроем файл popup_script.js и добавим код.

 //region var timeId = "time"; var dateId = "date"; var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct","Nov", "Dec"]; var consoleGreeting = "Hello World! - from popup_script.js"; function setTimeAndDate(timeElement,dateElement) < var date = new Date(); var minutes = (date.getMinutes() < 10 ? '0' : '') + date.getMinutes(); var time = date.getHours() + ":" + minutes; //In "date.getMonth", 0 indicates the first month of the year //In "date.getDay", 0 represents Sunday var date = days[date.getDay()] + ", " + months[date.getMonth()] + " " + date.getDate() + " " + date.getFullYear(); timeElement.innerHTML = time; dateElement.innerHTML = date; >//end-region //region console.log(consoleGreeting); document.addEventListener("DOMContentLoaded",function(dcle) < var timeElement = document.getElementById(timeId); var dateElement = document.getElementById(dateId); setTimeAndDate(timeElement,dateElement); >); //end-region 

Теперь создадим страницу popup.html.

     ShowTime (Custom) // Inline scripts are not allowed alert('Hello World'); -->  body < padding:0px; margin:0px; width:300px; height:200px; >div < height:100%; width:100%; display:table; font-family:"Tahoma","Verdana"; font-size:15px; font-weight:bold; text-shadow:0px 0px 1px #000000; background-color:#555; color:#fff; >h1,h2 < display:table-row; vertical-align:middle; text-align:center; >h2 < background-color:#777; >.unselectable Путь к скрипту всегда должен быть относительным. Можно создать несколько js-файлов, если скрипты сложные и требуется разделение по логике поведения. CSS-свойства также можно вынести в отдельный файл.

Приготовления закончены. Можно загрузить расширение в браузер и протестировать его. Откройте страницу chrome://extensions и включите режим разработчика Developer mode. В этом режиме будут доступны кнопки LOAD UNPACKED, PACK EXTENSION, UPDATE.

Щёлкните по кнопке LOAD UNPACKED и загрузите своё первое расширение. Оно появится в списке расширений, а также появится значок на панели. Щёлкните по значку, чтобы увидеть работу расширения в действии.

Вы можете использовать DevTools для отладки и тестирования как для обычных страниц и скриптов. Один из примеров для вывода в лог специфичных функций расширений (режим Инкогнито).

 chrome.extension.isAllowedIncognitoAccess(function(isAllowed) < console.log(isAllowed); >); 

Распространение расширения

Можно разместить своё расширение в специальном магазине расширений. Для этого заходим на страницу https://chrome.google.com/webstore/developer/dashboard. При первом заходе вам будет предложено войти в свою учётную запись и оплатить регистрацию (5$). После оплаты вам будет доступен весь функционал. Вам нужно будет упаковать свою папку в zip-файл и загрузить его на сервер. В успешном случае вы подтверждаете публикацию и ваше расширение будет доступно в магазине.

Компоненты расширений

В первом примере мы познакомились с компонентом Browser-Action. Доступны и другие компоненты.

  • Browser-Action
  • Page-Action
  • Shortcut-Key
  • Context-Menu-Item
  • Omnibox-Input
  • Content-UI
  • Popup (доступен из Browser-Action и Page-Action)

Также доступны скриптовые компоненты со своими областями видимости.

  • Event scripts (Background scripts)
  • Popup scripts
  • Content scripts

Создание расширения браузера Google Chrome для извлечения всех изображений web-страницы. Часть 1

Расширения браузера — это web-приложения, которые устанавливаются в web-браузер, чтобы расширить его возможности. Обычно, для того чтобы воспользоваться расширением, пользователю нужно найти его в Chrome Web Store и установить.

В этой статье я покажу как создать расширение для браузера Google Chrome с нуля. Это расширение будет использовать API браузера, для того чтобы получить доступ к содержимому web-страницы любой открытой вкладки. С помощью этих API можно не только читать информацию с открытых web-сайтов, но и взаимодействовать с этими страницами, например, переходить по ссылкам или нажимать на кнопки. Таким образом расширения браузера могут использоваться для широкого круга задач автоматизации на стороне клиента, таких как web-scrape или даже автоматизированное тестирование frontend.

Мы создадим расширение, которое называется Image Grabber. Оно будет содержать интерфейс для подключения к web-странице и для извлечения из нее информации о всех изображениях. Далее, при нажатии на кнопку «GRAB NOW» список абсолютных URL этих изображений будет скопирован в буфер обмена. В этом процессе вы познакомитесь с фундаментальными строительными блоками, которые в дальнейшем можно будет использовать для создания других расширений.

Расширения, создаваемые таким образом для браузера Chrome совместимы с другими браузерами, основанными на движке Chromium и могут быть установлены, например, в Yandex-браузер или Opera.

В результате при правильном выполнении всех шагов, вы получите расширение, которое будет выглядеть и работать так, как показано на следующем видео:

Это только первая часть истории. Во второй части я покажу, как расширить интерфейс, чтобы выгрузить все или выбранные изображения в виде ZIP-архива, а также, как опубликовать свое расширение в Chrome Web Store.

Базовая структура расширения

Расширение Google Chrome — это web-приложение, содержащее любое количество HTML-страниц, файлов CSS и изображений, а также, файл manifest.json, который определяет как расширение выглядит и работает. Все эти файлы должны быть в одной папке.

Минимальное расширение состоит только из одного файла manifest.json. Вот пример этого файла, который вы можете использовать как шаблон при начале создания любого расширения:

< "name": "Image Grabber", "description": "Extract all images from current web page", "version": "1.0", "manifest_version": 3, "icons": <>, "action": <>, "permissions": [], "background":<> >

Здесь только manifest_version должен быть равен 3. Остальные поля заполняются произвольно в зависимости от назначения расширения: name — название расширения, description — краткое описание, version — версия. Остальные параметры мы будем заполнять по ходу разработки интерфейса. Полный список параметров manifest.json можно найти в официальной документации.

Папка с одним файлом manifest.json — это минимальное расширение, которое может быть установлено в Google Chrome и запущено. Оно ничего не будет делать, однако именно с установки нужно начинать. Поэтому создайте папку image_grabber, затем добавьте в нее текстовый файл manifest.json с содержимым приведенным выше.

Установка расширения

В процессе разработки расширения, оно представляет собой папку с файлами. В терминологии Google Chrome это называется «unpacked extension». После завершения разработки, его нужно упаковать в ZIP-архив и загрузить в Chrome Web Store, откуда оно потом может быть установлено в браузер.

Однако на этапе разработки, «unpacked extension» тоже можно установить, просто как папку с файлами. Для этого нужно ввести chrome://extensions в браузере, чтобы открыть Chrome Extensions Manager:

Это покажет список уже установленных расширений. Чтобы устанавливать в него «unpacked extensions», включите флажок «Developer mode» в правом верхнем углу. После этого должна отобразиться панель управления расширениями.

Затем нажмите первую кнопку Load unpacked и укажите папку, в которой находится расширение с файлом manifest.json. В нашем случае это папка image_grabber. Расширение должно отобразиться в списке:

Эта панель должна показывать данные расширения такие как имя, описание и версию, ранее указанные в manifest.json, а также уникальный идентификатор, присвоенный этому расширению. Каждый раз после изменения manifest.json и файлов, непосредственно указанных в нем, нужно обновлять расширение в браузере, нажимая на кнопку «Reload«:

Чтобы запустить и использовать установленное расширение в браузере, нажмите кнопку Extensions на панели инструментов Google Chrome рядом с URL и найдите «Image Grabber» в списке установленных расширений:

Также можно нажать иконку Pin в списке рядом с расширением, чтобы добавить кнопку данного расширения на панель Chrome, рядом с другими расширениями:

Вот как выглядит минимальное расширение — кнопка с серым прямоугольником и буквой внутри. При нажатии на эту кнопку ничего не происходит. Давайте заполним остальные поля файла manifest.json, чтобы изменить картинку расширения и заставить его выполнять нужные действия.

Добавление иконок

Параметр icons файла manifest.json принимает объект JavaScript, ключами которого являются размеры иконок, а значениями пути к файлам с этими иконками. Иконка это картинка с расширением PNG (для прозрачности). Расширение должно иметь иконки разных размеров: 16×16, 32×32, 48×48 и 128×128. Я создал иконки для всех этих размеров и поместил их в папку «icons» внутри папки с расширением. Сделайте то же самое. Имена файлов могут быть любыми:

< "name": "Image Grabber", "description": "Extract all images from current web page", "version": "1.0", "manifest_version": 3, "icons": < "16":"icons/16.png", "32":"icons/32.png", "48":"icons/48.png", "128":"icons/128.png" >, "action": <>, "permissions": [], "background":<> >

Как видно, здесь указаны относительные пути к файлам в папке icons.

После изменения manifest.json нажмите кнопку «Reload» на панели расширения Image Grabber в Chrome Extensions Manager, чтобы обновить установленное расширение. Если все сделано как описано выше, то картинка на кнопке расширения должна измениться:

Так значительно лучше, однако когда мы нажимаем на эту кнопку все еще ничего не происходит. Пришло время добавить «действия» (actions) к расширению.

Создание интерфейса расширения

Расширение должно что-то делать, то есть запускать определенные действия. Расширение может выполнять действия двумя способами:

  • В фоне, при запуске расширения и при дальнейшей его работе
  • Из интерфейса, когда пользователь нажимает кнопку расширения и затем взаимодействует с различными интерфейсными элементами.

Расширение может использовать обе эти возможности одновременно.

Чтобы запускать действия в фоне, нужно создать Javascript-файл и указать путь к нему в параметре «background» файла manifest.json. Этот скрипт может содержать функции обработчики различных событий браузера и жизненного цикла самого расширения. Background-скрипт слушает эти события и запускает написанные для них функции обработчики.

Однако в этом расширении мы этим пользоваться не будем и параметр «background» останется пустым. Он присутствует только для того, чтобы показать что это возможно и что данный файл manifest.json может использоваться для создания расширений любого типа. Однако расширение Image Grabber выполняет действия только когда пользователь нажимает кнопку «GRAB NOW» из интерфейса.

Соответственно мы создадим интерфейс для расширения. Интерфейс расширения это фактически Web-сайт, состоящий из HTML-страниц с элементами управления, CSS-таблиц стилей и скриптов, которые реагируют на события элементов управления из этих HTML-страниц и выполняют определенные действия, используя в частности API расширений Google Chrome.

Интерфейс должен содержать главную страницу, которая появляется при нажатии на кнопку расширения. Эта страница может появляться либо в новой вкладке браузера, либо внутри всплывающего окна, как было показано на видео. Именно так и будет реализован интерфейс Image Grabber. Чтобы создать интерфейс всплывающего окна, внесите следующие изменения в manifest.json:

< "name": "Image Grabber", "description": "Extract all images from current web page", "version": "1.0", "manifest_version": 3, "icons": < "16":"icons/16.png", "32":"icons/32.png", "48":"icons/48.png", "128":"icons/128.png" >, "action": < "default_popup":"popup.html" >, "permissions": [], "background":<> >

Здесь определено, что основное действие (action) расширения это всплывающее окно (popup), которое содержит страницу popup.html.

Теперь создайте файл popup.html с заголовком Image Grabber и кнопкой «GRAB NOW» и поместите его в папку с расширением:

   Image Grabber  

Image Grabber

Кнопка имеет идентификатор grabBtn который в дальнейшем будет использоваться из скрипта, чтобы реагировать на нажатия.

Чтобы увидеть, что изменилось, снова обновите расширение в Chrome Extensions Manager. Если все было сделано как написано выше, то при нажатии на иконку расширения будет появляться содержимое файла popup.html во всплывающем окне:

Работает!! Но выглядит не очень. Теперь нужно стилизовать этот интерфейс с помощью CSS.

Создайте файл popup.css со следующим содержимым и поместите его в папку с расширением:

body < text-align:center; width:200px; >button

Этот файл определяет стили для кнопки и для body всей страницы: все содержимое выровнено по центру, а также, ширина содержимого будет 200 пикселей.

Добавьте ссылку на файл с этими стилями в popup.html:

   Image Grabber  

Image Grabber

Теперь при нажатии на кнопку расширения появится стилизованный интерфейс:

Обратите внимание, что в данном случае не требовалось нажимать кнопку Reload, для того чтобы обновить расширение. Изменения в файлах web-интерфейса расширения начинают работать автоматически.

Чтобы придать интерфейсу завершенность, добавим JavaScript-код, который будет реагировать на нажатия кнопки «GRAB NOW«. Создайте файл popup.js в папке с расширением со следующим содержимым:

const grabBtn = document.getElementById("grabBtn"); grabBtn.addEventListener("click",() => < alert("CLICKED"); >)

и добавьте ссылку на этот файл в popup.html:

   Image Grabber  

Image Grabber

Таким образом мы добавили событие onClick для кнопки с идентификатором «grabBtn«. Теперь, при нажатии на кнопку «GRAB NOW» в интерфейсе, должно появляться предупреждение «CLICKED».

В результате мы имеем такую файловую систему расширения:

Это все файлы, других больше добавлять не будем. Такую структуру можно использовать как базу для создания расширений Google Chrome с интерфейсом основанном на всплывающих окнах.

Теперь реализуем бизнес логику расширения: при нажатии на кнопку «GRAB NOW» расширение должно извлечь список путей ко всем картинкам текущей страницы в браузере и скопировать этот список в буфер обмена.

Функция «GRAB NOW»

Используя Javascript в расширении можно делать все то же самое, что и при использовании JavaScript на web-сайте, например открывать различные web-страницы из текущей или делать AJAX HTTP-запросы к различным серверам. Но в дополнении к этому, Javascript-код в расширении браузера может использовать различные API Chrome для взаимодействия с компонентами самого браузера. Большинство этих API доступно через пространство имен chrome . В частности, расширение Image Grabber будет использовать следующие API:

  • chrome.tabs — Chrome Tabs API. Будет использоваться для доступа к активной вкладке браузера.
  • chrome.scripting — Chrome Scripting API. Будет использоваться для внедрения кода JavaScript на web-страницу активной вкладки и для исполнения этого кода в контексте этой страницы.
Получение необходимых разрешений

По умолчанию, из соображений безопасности, расширение Chrome не имеет доступа ко всем API браузера. Необходимо запросить этот доступ через механизм разрешений. Для этого нужно указать список требуемых разрешений в параметре permissions в файле manifest.json. Существует множество различных разрешений, которые описаны здесь: https://developer.chrome.com/docs/extensions/mv3/declare_permissions/. Для Image Grabber нужно указать следующие из них:

  • activeTab — разрешение для получения доступа к текущей вкладке браузера.
  • scripting — разрешение для получения доступа к Chrome Scripting API для исполнения скриптов в контексте Web-страницы, открытой в браузере.

Добавьте эти разрешения в параметр permissions в файле manifest.json:

< "name": "Image Grabber", "description": "Extract all images from current web page", "version": "1.0", "manifest_version": 3, "icons": < "16":"icons/16.png", "32":"icons/32.png", "48":"icons/48.png", "128":"icons/128.png" >, "action": < "default_popup":"popup.html", >, "permissions": ["scripting", "activeTab"], "background":<> >

и обновите расширение в Chrome Extensions Manager.

Между тем, листинг выше — это окончательный вариант файла manifest.json для расширения. Теперь здесь есть все: название, описание, версия, иконки, ссылка на главную страницу интерфейса и разрешения на доступ к браузеру, которые этому интерфейсу необходимы.

Получение информации об активной вкладке браузера

Для получения информации о вкладках браузера используется функция chrome.tabs.query , которая определена следующим образом:

chrome.tabs.query(queryObject,callback)
  • queryObject — объект запроса в котором указываются параметры поиска нужных вкладок.
  • callback — функция обратного вызова, которая выполняется после выполнения этого запроса. В нее передается массив tabs , содержащий все найденные вкладки, соответствующие критерию запроса. Каждый элемент этого массива — это объект типа Tab , содержащий информацию о вкладке, включая ее уникальный идентификатор. Этот идентификатор будет использоваться для исполнения Javascript-кода на этой вкладке.

Здесь я не буду полностью описывать синтаксис queryObject , а также все поля возвращаемых объектов Tabs . Эту информацию можно найти в официальной документации по chrome.tabs : https://developer.chrome.com/docs/extensions/reference/tabs/.

Для расширения Image Grabber нужно получить только активную вкладку. Для этой цели queryObject должен быть определен как: .

Теперь давайте изменим код обработчика нажатия кнопки grabBtn в popup.js чтобы он получал активную вкладку и ее идентификатор, когда пользователь нажимает на кнопку «GRAB NOW» в интерфейсе расширения:

const grabBtn = document.getElementById("grabBtn"); grabBtn.addEventListener("click",() => < chrome.tabs.query(, (tabs) => < const tab = tabs[0]; if (tab) < alert(tab.id) >else < alert("There are no active tabs") >>) >)

Этот код выполняет запрос ко всем вкладкам, которые активны. Может быть только одна такая вкладка, поэтому к ней можно обратиться как tabs[0] . Если такая вкладка существует, то функция отображает ее id, а если не существует, то показывает сообщение об ошибке.

Если все сделано как описано выше, то при нажатии кнопки GRAB NOW должен появляться идентификатор текущей вкладки браузера. Далее мы изменим этот код таким образом, чтобы этот идентификатор использовался для доступа к web-странице, открытой на этой вкладке.

Извлечение изображений из текущей страницы

Расширение может взаимодействовать с открытыми страницами с помощью интерфейса Chrome Scripting API, доступного через chrome.scripting . В частности, мы будем использовать функцию для внедрения своего кода в текущую web-страницу и для исполнения этого кода в ее контексте. При запуске этот код будет иметь доступ к DOM-дереву этой страницы и сможет делать нужные нам действия с любыми HTML-тэгами.

Для внедрения скрипта в страницу Web-браузера используется функция executeScript , определенная следующим образом:

chrome.scripting.executeScript(injectSpec,callback)

Рассмотрим ее параметры.

injectSpec

Это объект типа ScriptInjection. В нем определяется какой Javascript-код, в какую web-страницу и каким образом внедрить. В частности, в параметре target указывается идентификатор вкладки браузера со страницей, которая нам нужна. Мы получили его ранее. Остальные параметры указывают каким образом передать скрипт на эту страницу. Возможно использовать следующие параметры для передачи скрипта:

  • files — указывается список путей к JS-файлам, которые нужно внедрить, относительно корневой папки расширения
  • func — указывается Javascript-функция, которую нужно внедрить. Функция должна быть предварительно написана.

Скрипт, который планируется внедрить, будет извлекать список изображений с web-страницы и возвращать список URL этих изображений. Это небольшой скрипт, поэтому достаточно создать функцию для него. Она будет называться grabImages . Эта функция должна извлекать список URL изображений web-страницы и возвращать его. Возвращаемое значение этой функции будет передано расширению.

В итоге injectSpec будет определен следующим образом:

< target:< tabId: tab.id, allFrames: true >, func: grabImages, >, 

Здесь функция, указанная в параметре func будет внедрена на страницу, определенную параметром target . В параметре target указывается полученный на предыдущем этапе идентификатор вкладки, а также, устанавливается параметр allFrames . Этот дополнительный параметр говорит что скрипт должен выполняться во всех фреймах web-страницы, в случае если они на этой странице есть.

Саму функцию grabImages мы напишем чуть позже.

callback

Это функция обратного вызова, которая будет вызвана после того, как внедренный скрипт исполнится на странице и во всех ее фреймах. В качестве параметра в ней будет массив результатов, которые вернула функция grabImages для каждого фрейма (возможно это будет всего один элемент, если фреймов нет). Каждый элемент этого массива — это объект типа InjectionResult. Он в частности содержит свойство result . Именно оно содержит то, что возвращает функция grabImages, т.е. список URL-ов.

Теперь соберем все вместе в следующем коде:

const grabBtn = document.getElementById("grabBtn"); grabBtn.addEventListener("click",() => < chrome.tabs.query(, function(tabs) < var tab = tabs[0]; if (tab) < chrome.scripting.executeScript( < target:, func:grabImages >, onResult ) > else < alert("There are no active tabs") >>) >) function grabImages() < // TODO - Запросить список изображений // и вернуть список их URL-ов >function onResult(frames) < // TODO - Объединить списки URL-ов, полученных из каждого фрейма в один, // затем объединить их в строку, разделенную символом перевода строки // и скопировать в буфер обмена >

Функция grabImages может быть определена следующим образом:

/** * Функция исполняется на удаленной странице браузера, * получает список изображений и возвращает массив * путей к ним * * @return Array массив строк */ function grabImages() < const images = document.querySelectorAll("img"); return Array.from(images).map(image=>image.src); >

Здесь все просто: получаем список DOM-элементов и извлекаем свойство src каждого из них в итоговый массив. Считаю нужным напомнить, что объект document , указанный в этой функции указывает на содержимое не той HTML-страницы, где находится функция grabImages , а удаленной web-страницы, в которую эта функция будет внедрена.

После того как данная функция выполнится в каждом фрейме, результаты будут объединены в единый массив и переданы в функцию onResult . Эта функция может быть определена следующим образом:

/** * Выполняется после того как вызовы grabImages * выполнены во всех фреймах удаленной web-страницы. * Функция объединяет результаты в строку и копирует * список путей к изображениям в буфер обмена * * @param <[]InjectionResult>frames Массив результатов * функции grabImages */ function onResult(frames) < // Если результатов нет if (!frames || !frames.length) < alert("Could not retrieve images from specified page"); return; >// Объединить списки URL из каждого фрейма в один массив const imageUrls = frames.map(frame=>frame.result) .reduce((r1,r2)=>r1.concat(r2)); // Скопировать в буфер обмена полученный массив // объединив его в строку, используя символ перевода строки // как разделитель window.navigator.clipboard .writeText(imageUrls.join("\n")) .then(()=>< // закрыть окно расширения после // завершения window.close(); >); >

Следует упомянуть что не все вкладки браузера — это вкладки с web-страницами. Например, может быть вкладка свойств браузера. Страницы на таких вкладках не имеют свойства document . В этом случае функция grabImages не выполнится и не вернет результатов. Этот случай обрабатывается в самом начале функции. Затем массив массивов результатов объединяется в единый плоский массив используя концепцию map/reduce, затем функция window.navigator.clipboard используется, чтобы скопировать его в буфер обмена. Предварительно массив результатов преобразовывается в строку, разделенную символом перевода строки.

Завершающие штрихи

Здесь я описал только незначительную часть Chrome Scripting API и описал только в контексте данного расширения. Полная документация по Chrome Scripting API доступна здесь: https://developer.chrome.com/docs/extensions/reference/scripting/.

Теперь немного почистим код. Здесь я считаю нужным часть функции обработчика grabBtn, которая выполняет chrome.scripting.executeScript вынести в отдельную функцию execScript . В результате файл popup.js выглядит так:

const grabBtn = document.getElementById("grabBtn"); grabBtn.addEventListener("click",() => < // Получить активную вкладку браузера chrome.tabs.query(, function(tabs) < var tab = tabs[0]; // и если она есть, то выполнить на ней скрипт if (tab) < execScript(tab); >else < alert("There are no active tabs") >>) >) /** * Выполняет функцию grabImages() на веб-странице указанной * вкладки и во всех ее фреймах, * @param tab Объект вкладки браузера */ function execScript(tab) < // Выполнить функцию на странице указанной вкладки // и передать результат ее выполнения в функцию onResult chrome.scripting.executeScript( < target:, func:grabImages >, onResult ) > /** * Получает список абсолютных путей всех картинок * на удаленной странице * * @return Array Массив URL */ function grabImages() < const images = document.querySelectorAll("img"); return Array.from(images).map(image=>image.src); > /** * Выполняется после того как вызовы grabImages * выполнены во всех фреймах удаленной web-страницы. * Функция объединяет результаты в строку и копирует * список путей к изображениям в буфер обмена * * @param <[]InjectionResult>frames Массив результатов * функции grabImages */ function onResult(frames) < // Если результатов нет if (!frames || !frames.length) < alert("Could not retrieve images from specified page"); return; >// Объединить списки URL из каждого фрейма в один массив const imageUrls = frames.map(frame=>frame.result) .reduce((r1,r2)=>r1.concat(r2)); // Скопировать в буфер обмена полученный массив // объединив его в строку, используя возврат каретки // как разделитель window.navigator.clipboard .writeText(imageUrls.join("\n")) .then(()=>< // закрыть окно расширения после // завершения window.close(); >); >

Заключение

Теперь, если нажать по иконке расширения Image Grabber и затем кликнуть кнопку GRAB NOW, то в буфере обмена будет список URL-ов всех изображений текущей web-страницы. Можно вставить его в любой текстовый редактор.

Для начала, возможно, неплохо, но практическая ценность такого расширения не велика. Поэтому в следующей части я покажу как выгрузить все эти изображения в виде zip-архива, а также, создать дополнительный интерфейс, для того чтобы выбрать какие картинки добавлять в этот ZIP-архив, а какие нет. Также опишу процесс публикации готового расширения в Chrome Store.

Поэтому подписывайтесь, думаю к концу следующей недели вторая часть будет доступна вместе с полным исходным кодом.

Вторая часть опубликована и доступна здесь.

2 способа: как установить расширение в Google Chrome, настраивать и удалять

Браузер Гугл Хром не отстает от своих аналогов, конкурентов и позволяет дополнять свои возможности за счет установки различных расширений. При помощи них можно выполнять те функции, которых изначально нет в браузере, например: быстрое подключение к VPN, скачивание музыки, видео с различных сайтов (ютуб, вконтакте и прочие), моментально сохранить нужные данные с вебстраниц на гугл диске и многое другое. Вопрос только, как установить расширение в google chrome? Сейчас я подробно отвечу на данный вопрос, рассмотрим как ставить стандартные дополнения прямо из «магазина» браузера, а также дополнительные, которые он не дасту становить стандартным способом. Такими дополнениями, пользуются очень многие пользователи, каждый выбирает что-то под свои цели и задачи, личные нужды.

Как установить расширение в google chrome

Прежде чем пояснить процесс установки, приведу несколько примеров расширений, чтобы вы понимали, что это может из себя представлять и где они расположены. Все, что вы устанавливаете в хром из дополнений, будет располагаться в правом верхнем углу (сразу после адресной строки браузера): Некоторые примеры расширений:

  • RUSVPN — устанавливается для быстрого подключения к VPN от соответствующего разработчика. Есть масса других расширений, от иных разработчиков. Как вы поняли, такой подход в хроме позволит обходиться без установки полноценного софта в Windows.
  • Сохранить на Google Диске — дает возможность сохранять контент с сайтов на своем диске, буквально в пару кликов.
  • Google Переводчик — позволяет переводить страницы, отдельные предложения, фразы, слова с любых языков на любые, не переходя на соответствующий сервис для перевода.

Это лишь 3 примера, но удобных штуковин для браузера на самом деле масса и вы будете с ними сталкиваться по мере работы, потому что многие сайты и программы на компьютере предлагают установить свои дополнения в браузер для удобства работы.

Вариант 1 — стандартная установка через магазин

Не стоит пугаться слова «магазин», поскольку многие расширения бесплатные 🙂 Есть конечно и платные, либо условно платные (с ограничениями в бесплатном режиме).

Самый простой и наиболее часто используемый способ установки расширений — перейти по ссылке на него в магазине Google Chrome, что обычно применяется на сайтах, предлагающих какие-либо программы. Например, RUSVPN предлагает установить свое расширение, а кнопка на сайте везет на магазин Google Chrome:

Ссылка на установку расширения выглядит обычно так (имейте это ввиду, если встретите такой адрес):

Перейдя на страницу расширения, нужно нажать «Установить», после чего еще раз подтвердить установку во всплывающем окне:

Через несколько секунд расширение будет установлено и вы увидите его значок в правом верхнем углу.

Также вы можете самостоятельно выбрать расширения из магазина Хром, найдя по нужные по поиску или специальным фильтрам. Для этого перейдите по ссылке https://chrome.google.com/webstore/category/extensions или откройте меню браузера: «дополнительные инструменты», «расширения».

В открывшемся окне открываем еще раз слева вверху меню «расширения» и внизу выбираем «открыть интернет-магазин google chrome».

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

Вариант 2 — установка расширения из файла

Браузер также позволяет устанавливать расширения, загруженные с компьютера в виде папки с файлами, среди которых есть файл .CRX. Но такая возможность стандартно недоступна, поскольку разработчики тем самым оберегают нас от возможных последствий, ведь в файл с дополнением можно и вирусятинку закинуть.

Поэтому если вам понадобится установить в браузер какое-либо расширение из вручную, то будьте внимательны! Убедитесь, что это действительно надежный файл, что вы доверяете ресурсу и авторам, от которых его получили.

Если уверены, то перейдите в упомянутый выше раздел расширений:

Затем включите «режим разработчика» и нажмите появившуюся кнопку «загрузить распакованное расширение».

Откроется проводник системы, где осталось выбрать папку с распакованным расширением на компьютере и оно будет установлено в браузер. Расширение должно быть именно распаковано! То есть, скачав его изначально в архиве ZIP, нужно этот архив распаковать.

Параметры (настройка), отключение и удаление расширений

Удаление и отключение производится прямо из общего списка, если перейти в тот самый раздел «дополнительные инструменты», «расширения». Здесь вы увидите соответствующую кнопку «удалить», а также переключатель, отвечающий за включение / отключение:

Удаление, соответственно, совсем убирает расширение из хрома, а отключение позволяет убрать его на время, т.е. оно не будет работать и исчезнет из списка активных в правом верхнем углу браузера. Но всегда можно зайти в этот же раздел и включить снова.

Параметры есть не у всех расширений. Чтобы проверить, просто кликните по нужному из списка активных и увидите соответствующую кнопку:

Если она активна, то кликнув по ней, перейдете как раз в раздел настроек. Ну а если неактивна, значит у расширения нет параметров.

Заключение и выводы

Некоторые расширения, устанавливаемые в Google Chrome позволяют существенно упростить различные задачи. У каждого они свои: кому-то нужно быстро менять IP через прокси и VPN, что можно сделать через установку соответствующих расширений, не прибегая к полноценным программам Windows, кому-то оперативно работать с «облаком», кому-то взаимодействовать с различными другими сервисами и программами.

Процесс поиска и установки, как вы успели заметить, очень прост. Главное будьте осторожны при установке расширений вручную! Хотя для новичков, например, и простых пользователей ПК, такой вариант вряд ли вообще пригодится.

Напишите, пожалуйста в комментариях ниже, все ли понятно по статье, для чего служат расширения в гугл хроме и как их устанавливать? Если что-то непонятно, я дополню статью, а заодно отвечу сразу на возникшие вопросы.

Сделай репост – выиграй ноутбук!

Каждый месяц 1 числа iBook.pro разыгрывает подарки.

  • Нажми на одну из кнопок соц. сетей
  • Получи персональный купон
  • Выиграй ноутбук LENOVO или HP

Ноутбук, который можно выиграть, сделав репост.

—> LENOVO или HP от 40-50 т.р., 8-16ГБ DDR4, SSD, экран 15.6″, Windows 10

6 шагов по созданию расширения Chrome, которое можно продать

Свое первое расширение для Chrome я создала с целью автоматизации ряда регулярно повторяющихся процессов. В этой статье я поделюсь с вами полученным опытом и обобщу все необходимое для быстрого создания собственного расширения.

Это настолько интересно, что многие разработчики используют данный способ для получения онлайн-дохода на продаже подобных расширений. Перейдем сразу к делу!

Шаг 1. Создание структуры каталога

Прежде чем начать писать код, нам понадобится каталог, в котором мы будем создавать расширение. А для того, чтобы расширение заработало должным образом, этот каталог должен иметь конкретную структуру.

Потребуется 3 основных компонента:

  • файл описания;
  • иконка;
  • HTML-файл.

Шаг 2. Создание файла описания

Файл описания подобен файлу конфигурации, необходимому Chrome для понимания и правильной загрузки расширения.

Вот пример такого файла manifest.json :

 "manifest_version": 2, 
"name": "Front by FAM",
"version": "1.0.0",
"description": "Quick access to Front",
"browser_action": "default_icon": "img/favicon.png",
"default_title": "Front",
"default_popup": "front-popup.html"
>
>

Можно добавить фоновый скрипт для серверных задач, равно как и многие другие опции. Более подробно об этом можно узнать из документации (англ.)

Шаг 3. Создание системы расширения

Очень важный шаг. Мы будем прописывать код функциональности расширения, его систему.

В этой статье я решила сделать расширение, которое позволит вам быстро со мной связываться. ��

Проектирование

Для этого примера я все преподнесу в простом виде. Нам понадобятся:

  • фон;
  • карточки для ссылок на мои аккаунты в социальных сетях;
  • простой футер со ссылкой на мою вселенную в интернете ^^

На этом все. В конечном итоге у нас получится нечто подобное:

Написание кода

  • логотип и заголовок;
  • карточки аккаунтов Instagram, LinkedIn, YouTube и Twitter;
  • футер.

Вы заметите, что я уже интегрировала CSS-файл front.css , а также JS-файл front.js . JS-файл в этом примере я не использовала, а добавила его просто, чтобы продемонстрировать возможность применения JavaScript в построении расширения для Chrome.

Раcширение Front для Chrome:






type="image/png"
href="img/favicon.png">







Instagram










LinkedIn






Youtube







Twitter








Created with love by FAM






Шаг 4. Стилизация

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

После стилизации HTML-кода получаем такой результат:

Код CSS:

@import url('https://fonts.googleapis.com/css2?family=Amatic+SC&display=swap');

body padding: 0;
margin: 0;
font-family: 'Amatic SC', cursive;
font-size: xx-large;
>

.container background-image: linear-gradient(
135deg,
rgba(52, 152, 219, 0.5) 0%,
rgba(243, 65, 65, 0.4) 100%
),
url('http://i.imgbox.com/LmWSE419.jpg');
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;
height: 100%;
overflow: hidden;
>

.logo padding: 50px;
width: 300px;
margin: auto;
>

.container img.logo,
.footer,
.container p display: flex;
justify-content: center;
font-size: xx-large;
>

.text-white color: white;
>

/* Social media cards*/
.cards-list z-index: 0;
width: 100%;
display: flex;
justify-content: space-around;
flex-wrap: wrap;
padding-bottom: 230px;
>

.card margin: 30px auto;
width: 250px;
height: 250px;
border-radius: 40px;
box-shadow: 5px 5px 30px 7px rgba(0, 0, 0, 0.25),
-5px -5px 30px 7px rgba(0, 0, 0, 0.22);
transition: 0.4s;
>

.card .card_image width: inherit;
height: inherit;
border-radius: 40px;
>

.card .card_image img width: inherit;
height: inherit;
border-radius: 40px;
object-fit: cover;
>

.card .card_title text-align: center;
border-radius: 0px 0px 40px 40px;
font-family: 'Amatic SC', cursive;
font-weight: lighter;
font-size: 50px;
margin-top: -80px;
height: 40px;
color: black;
>

.card .card_title a color: black;
>

.card:hover transform: scale(0.9, 0.9);
box-shadow: 5px 5px 30px 15px rgba(0, 0, 0, 0.25),
-5px -5px 30px 15px rgba(0, 0, 0, 0.22);
>

@media all and (max-width: 500px) .card-list /* For small screens*/
flex-direction: column;
>
>

/* Footer */
.footer,
.footer a background-color: black;
color: white;
>

Шаг 5. Расширение в действии

Это самый впечатляющий шаг. Мы опубликуем наше расширение и пронаблюдаем его в действии.

Для этого нужно:

Проверьте список ваших расширений и убедитесь, что все в порядке.

Шаг 6. Если все в порядке, то можно гордо публиковать расширение для всего мира

Все сложное вы проделали. Теперь можете переходить к публикации расширения в магазине Chrome:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *