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

Напрасно вы приобрели знания, если не передали их другим. - Второзаконие Раба

Вот два моих замечательных расширения:

  1. JSconsole: для загрузки внешних JS-библиотек в вашу консоль разработчика. Недавно опубликовал в магазине Chrome
  2. Подведем итоги: микро-закладка и многоцветный маркер.

PS: Оба были представлены на Product Hunt (JSconsole и SumItUp)

Давайте вместе создадим JSconsole 🤝

Проблема, которую он решит:

Итак, приятель, у меня была проблема с моей консолью разработчика Chrome (⌘ + ⌥ + i на Mac или Ctrl + Shift + i в Windows ИЛИ Linux). Поверьте, хромированная консоль разработчика очень умна и имеет множество встроенных функций, но чего не хватает, так это то, что она не может загружать внешние библиотеки прямо внутри нее. Например, что, если мне нужны jQuery, Lodash, Moment и т. Д. В текущем рабочем контексте консоли?

Чем я занимался раньше?

1. Скопируйте полный код из CDN и вставьте его прямо в мою консоль. Например, если бы мне понадобился `момент` в моей консоли, я бы сделал, как показано ниже:

2. Я бы пошел на некоторые веб-сайты с кодовыми скриптами, такие как JSfiddle, Plunker, JSBin и т. Д., Которые могут предоставить вам платформу для игры с внешними библиотеками, но это тоже требует большого переключения контекста, и вам нужно установить аналогичную среду на реальную один для правильного тестирования.
3. Если бы я хотел, чтобы библиотека загружалась на страницу как часть тега скрипта. Я бы использовал приведенный ниже код.

const script = document.createElement(‘script’);
script.src = CDN_URL; 
(document.head||document.documentElement).appendChild(script);

4. Один из способов - отредактировать HTML и добавить в него тег скрипта с правильной ссылкой CDN, но этот тоже утомляет.

Но все четыре вышеупомянутых метода заставят вас переключить контекст и искать URL-адрес CDN библиотеки.

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

Давайте погрузимся в настоящую игру !!!

Первая часть будет посвящена основам расширения Chrome и тому, как начать работу с Yeoman (инструмент для создания шаблонов) для настройки начальной иерархии папок.

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

PepTalk: если вы знаете основы HTML, CSS и JAVASCRIPT, вы также можете создать расширение для Chrome.

Основные определения 📖

  1. Yeoman: веб-инструмент для создания современных веб-приложений. Это поможет вам получить стартовый набор всего, что связано с сетью в этом мире.
  2. API JavaScript: перейдите к руководству по всем API, которые Google предоставляет разработчикам расширений Chrome.
  3. Обзор: основное определение различных компонентов, которые мы будем использовать в этом руководстве.

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

Первая ( 😛 ) -арт:

Я всегда использую yeoman для настройки базовой архитектуры своих приложений и верю, что это счастье избежать хлопот с настройкой структуры папок. Это помогает мне сосредоточиться на написании бизнес-логики, а не на настройке множества конфигураций. Вот иди, приятель, следуй ниже 👣

------------------------------------------------------------
                          SETUP STEPS
------------------------------------------------------------
# Please make sure that `yo`, `gulp` and `bower` was installed on your system using this command:
npm install -- global yo gulp-cli bower
# Install the generator:
npm install -g generator-chrome-extension
# Make a new directory, and `cd` get into it:
mkdir lovely_extension && cd $_
# Generate a new project
yo chrome-extension
? Choose your style of DSL (Use arrow keys)
❯ BDD (Choose this one if you don't want to write test case from starting)
  TDD (Recommended)
? What would you like to call this extension? (lovely_extension): Test
? How would you like to describe this extension? (My Chrome Extension) Learning chrome extensions
? Would you like to use UI Action? (Use arrow keys)
  No
  Browser Action (Permanently displayed to the right of the address bar.)
❯ Page Action (Only displayed on certain pages, and their icon appears inside the address bar.)
Would you like more UI Features?
 ◯ Options UI (UI for options in extension)
❯◉ Content Scripts (Required to control the page of users. Need to inject something on DOM).
 ◯ Omnibox
Would you like to set permissions?
 ◯ History
 ◯ Idle
 ◯ Management
❯◯ Notifications
 ◯ Page Capture
 ◯ Tabs
 ◯ Top Sites
(Choose appropriate storage according to your extension type. Don't worry you can edit it later directly in manifest.json file).
Wait for 2 minutes setup magic 💥 💫 is happening ..............

2. Откройте приложение ›popup.html.

Replace <h1>’Allo, ‘Allo!</h1> to
<h1>’I am awesome chrome extension developer’</h1>

3. Запустите ›gulp build (будет создана папка dist).

4. Откройте Настройки Chrome ›Дополнительные инструменты› Расширения ›Режим разработчика (проверьте)› Загрузить распакованное расширение… › Выберите папку dist, созданную на шаге 2.

Вот и ты, приятель

Некоторые команды, которые вы можете использовать при разработке расширения Chrome.

------------------------------------------------------------
DEVLOPEMENTS COMMANDS
------------------------------------------------------------
# Using watch to update source continuously
gulp watch // Use it for development
# Make a production version extension
gulp build // Use it to get it build for production.
# Make a production ready zip file to upload to Chrome web store
gulp build && gulp package

Второй (😛) -арт:

Эта часть будет включать в себя шаги по созданию JSconsole.

1) Я выполнил точно те же шаги, что и в первой части.

2) Мне нужно вставить мою библиотеку в объект окна с пространством имен window.js. Этого можно добиться только с помощью контентного сценария.

function injectJs(link) {
var scr = document.createElement("script");
scr.type = "text/javascript";
scr.src = link;
(document.head || document.body || document.documentElement).appendChild(scr);
}
injectJs(chrome.extension.getURL("scripts/main.js"));

main.js содержит всю логику для добавления элементов в окно.

https://github.com/jsconsole/chrome-jsconsole/blob/master/app/scripts.babel/main.js 
// In the abstract world main.js looks like this.
const js = function() {
// private and public methods i.e readme(), load()..etc
const readme = function() {
   //Definition
};
const load = function(value) {
   //Definition
};
const result = {
  readme,
  load,
  ....
  etc
};
}
window.js = js();

3) Внутри метода load (). WTM (Что за магия) происходит внутри него? Я вызываю api.cdnjs.com, чтобы получить URL-адрес CDN для имени библиотеки, которое пользователь ввел при загрузке с помощью js.load (имя_библиотеки).

var url = `https://api.cdnjs.com/libraries?search=${name}&fields=version,description,homepage`;
 return fetch(url).then(function(dataJSON) {
 return dataJSON.json();
 });

4) Добавьте URL-адрес CDN из ответа приведенного выше кода в качестве сценария в DOM (аналогично шагу 2).

5) Вы можете получить полный код здесь. Разбейте его, нравится и получайте удовольствие. Отправьте PR, если вы хотите внести свой вклад и ищете какой-нибудь начинающий проект с открытым исходным кодом.

Спасибо всем за то, что дочитали до сих пор. Я блогер-новичок, и любой отзыв будет для меня полезен.

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