Как написать расширение для firefox
Перейти к содержимому

Как написать расширение для firefox

  • автор:

Внутреннее устройство расширения

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

manifest.json

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

Этот манифест также может содержать указатели на несколько других типов файлов:

  • Background pages: Реализует долгоиграющую логику.
  • Иконки для расширения и любых кнопок, которые оно может определить.
  • Sidebars, popups, and options pages: HTML-документы, которые предоставляют содержимое для различных компонентов пользовательского интерфейса.
  • Content scripts: JavaScript сценарии вашего расширения, которые будут исполняться на веб-страницах.
  • Web-accessible resources: Делает контент вашего расширения видимым для веб-страниц и скриптов.

Для получения подробной информации см. справочную страницу manifest.json

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

Фоновые скрипты

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

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

Спецификации фоновых скриптов

Вы можете включить фоновый скрипт, используя background ключ в «manifest.json»:

// manifest.json "background":  "scripts": ["background-script.js"] > 

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

Вместо указания несколько фоновых сценариев вы можете указать фоновую страницу, которая так же преимущества поддержки ES6 модулей:

manifest.json:

// manifest.json "background":  "page": "background-page.html" > 

background-page.html:

doctype html> html lang="en"> head> meta charset="utf-8" /> script type="module" src="background-script.js"> script> head> html> 

Окружение фоновых скриптов

DOM APIs

Фоновые скрипты запускаются в пространстве специальной страницы, называемой фоновой. Это даёт им доступ к глобальному window объекту, а так же ко всем его DOM APIs.

WebExtension API

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

Многоцелевой доступ

Фоновые скрипты могут осуществлять XHR запросы к любому домену, если расширение имеет host разрешения.

Web-содержимое

Фоновые скрипты не получают прямого доступа к веб-страницам. Однако они могут загружать скрипты содержимого на веб-страницы и взаимодействовать с этими скриптами с помощью API передачи сообщений.

Политика безопасности содержимого

Фоновые скрипты ограничены в выполнении потенциально опасных операций, таких как eval() , через политику безопасности содержимого. Подробнее см. Content Security Policy.

Боковые панели (sidebar), всплывающие окна (popup), страницы настроек

Ваше расширение может иметь разнообразные компоненты интерфейса, определённые в HTML документах:

  • Боковая панель (sidebar) — это панель, отображаемая в окне браузера с левой стороны, рядом с веб-страницей
  • Всплывающие окна (popup (en-US)) — диалоговое окно, отображаемое по клику на кнопке на панели инструментов или в адресной строке
  • Страница настроек (en-US) открывается, когда пользователь обращается к настройкам расширения на странице менеджера расширений.

Для каждого из этих компонентов вы создаёте HTML файл и помещаете специальную информацию в manifest.json. HTML файл может в себя включать CSS и JavaScript файлы, как и любая web-страница.

Всё это типы веб-страниц расширения, и, в отличие от нормальных веб-страниц, ваш JavaScript может использовать все привелегии WebExtension API, как и ваши фоновые скрипты. Они даже могут получить доступ к переменным в фоновой странице, используя runtime.getBackgroundPage() (en-US) .

Веб-страницы расширения

Вы также можете включить HTML документы в ваше расширение, даже если они не будут включены в какой-либо существующий компонент пользовательского интерфейса. В отличие от документов, которые вы можете предоставить для боковых панелей, всплывающих окон или страниц настроек, эти документы не содержатся в manifest.json. Однако, они также имеют такой же доступ к WebExtension API, как и фоновые скрипты.

Встраиваемые скрипты

Используйте встраиваемые скрипты для доступа и изменения веб-страниц. Встраиваемые скрипты загружаются в веб-страницу и исполняются в контексте данной конкретной страницы.

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

Встраиваемые скрипты имеют доступ и могут манипулировать DOM, как и обычные скрипты, загруженные веб-страницей.

В отличие от обычных скриптов, они могут:

  • Осуществлять XHR запросы.
  • Использовать часть API расширений.
  • Обмениваться сообщениями с их фоновыми скриптами и таким образом иметь доступ ко всему WebExtension API.

Встраиваемые скрипты не могут напрямую взаимодействовать с обычными скриптами на странице, но они могут обмениваться сообщениями с помощью стандартного window.postMessage() API.

Обычно, когда мы говорим о встраиваемых скриптах, мы отсылаемся к JavaScript, но вы так же можете внедрить CSS в веб-страницы, используя этот же механизм.

Веб-доступные ресурсы

Веб-доступные ресурсы — это ресурсы вроде изображений, HTML, CSS и JavaScript, которые вы включаете в расширение и хотите сделать доступными для встраиваемых скриптов и оригинальных скриптов веб-страницы. Такие ресурсы могут быть доступны скриптам через специальную URI схему.

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

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 11 дек. 2023 г. by MDN contributors.

Ваше первое расширение

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

В этой статье мы пройдём весь путь создания расширения для Firefox от начала и до конца. Это расширение будет просто добавлять красную рамку ко всем страницам, загруженным с mozilla.org или любого из его поддоменов.

Написание расширения

Создайте новую папку с именем borderify и перейдите в неё. Вы можете сделать это с помощью Проводника вашего компьютера или терминала командной строки (en-US) . Умение работать с терминалом командной строки очень полезно, поскольку оно помогает вести более продвинутую разработку расширений. Используя терминал, создать папку можно следующим образом:

mkdir borderify cd borderify 

manifest.json

Используя удобный текстовый редактор, создайте в папке borderify новый файл с именем manifest.json и таким содержимым:

 "manifest_version": 2, "name": "Borderify", "version": "1.0", "description": "Adds a red border to all webpages matching mozilla.org.", "icons":  "48": "icons/border-48.png" >, "content_scripts": [  "matches": ["*://*.mozilla.org/*"], "js": ["borderify.js"] > ] > 
  • Первые три ключа: manifest_version , name и version , являются обязательными и содержат основные метаданные о расширении.
  • description не обязателен, но рекомендуется добавлять его: это описание отображается в Управлении дополнениями.
  • icons не обязателен, но рекомендуется добавлять его: он позволяет указать значок дополнения, который будет виден в Управлении дополнениями.

Самый интересный ключ здесь — это content_scripts (en-US) , он даёт указание Firefox загружать указанный скрипт на веб-страницах, у которых URL совпадает с заданным шаблоном. В нашем случае, мы просим Firefox загрузить скрипт с названием borderify.js на всех HTTP или HTTPS страницах, полученных с mozilla.org или любого из его поддоменов.

Предупреждение: В некоторых случаях вам нужно указать ID для вашего дополнения. Если это необходимо, то добавьте ключ browser_specific_settings (en-US) в файл manifest.json и установите свойство gecko.id :

"browser_specific_settings":  "gecko":  "id": "borderify@example.com" > > 

icons/border-48.png

Если у расширения есть значок, то он будет отображаться в списке расширений Управления дополнениями. Наш файл manifest.json сообщает, что значок находится в файле icons/border-48.png .

Создайте папку icons внутри borderify и поместите в неё файл значка с именем border-48.png . Вы можете использовать значок из нашего примера, который взят из набора Google Material Design и используется по лицензии Creative Commons Attribution-ShareAlike.

Вы можете использовать собственный значок. Его размер должен быть 48×48 пикселей или 96×96 пикселей для отображения на мониторах с высоким разрешением. В этом случае необходимо указать его в качестве свойства 96 объекта icons в файле manifest.json :

"icons":  "48": "icons/border-48.png", "96": "icons/border-96.png" > 

Также можно использовать файл в формате SVG, и он будет правильно масштабироваться. Но нужно иметь в виду, что если вы используете SVG и ваш значок содержит текст, то возможно стоит воспользоваться инструментом «преобразовать в контур» в редакторе SVG, чтобы текст масштабировался корректно.

borderify.js

Наконец, создайте в папке borderify файл с именем borderify.js с таким содержимым:

.body.style.border = "5px solid red"; 

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

Пробуем

Сначала внимательно проверьте, что вы правильно разместили файлы и дали им правильные имена:

borderify/ icons/ border-48.png borderify.js manifest.json

Установка

В Firefox: откройте страницу about:debugging, кликните Этот Firefox , далее нажмите на кнопку Загрузить временное дополнение. и выберите любой файл из папки с нашим примером.

Расширение будет установлено и остается установленным до перезапуска Firefox.

Также можно запустить расширение с помощью командной строки используя утилиту web-ext.

Тестирование

Примечание: По умолчанию расширения не работают в режиме приватного просмотра. Если вы хотите протестировать расширение в режиме приватного просмотра, то откройте about:addons , выберите расширение и установите переключатель Запуск в приватных окнах в положение Разрешить .

Теперь перейдите на любую страницу » https://www.mozilla.org/ru/ » и вы должны будете увидеть красную границу вокруг страницы.

На mozilla.org отображается рамка

Примечание: Не проверяйте на addons.mozilla.org ! Встраиваемые скрипты на данный момент запрещены на этом поддомене.

Попробуйте немного поэкспериментировать. Измените цвет границы или сделайте что-нибудь ещё с содержимым страницы. Для этого внесите изменения в скрипт и перезагрузите файлы расширения, нажав кнопку Обновить в about:debugging . Сразу после этого изменения станут видны.

Упаковка и публикация

Чтобы другие люди могли использовать ваше дополнение, необходимо запаковать его и отправить в Mozilla для добавления подписи. Узнать больше об этом можно в разделе «Publish» Мастер-класса по расширениям Firefox.

Что дальше?

Теперь, когда вы имеете представление о разработке расширений для Firefox, вы можете:

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

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 11 дек. 2023 г. by MDN contributors.

Your blueprint for a better internet.

Создание расширения FireFox для начинающих

В данной статье представлена пошаговая инструкция по разработке простейшего расширения для FireFox.
Это частичный перевод оригинальной статьи.

Это не моя статья, а моего друга (его мыльце: templar8@gmail.com). Он очень хочет попасть на Хабр. У меня самого не хватает кармы для инвайта.

Вступление

Это руководство — пошаговая инструкция по созданию простейшего расширения. Мы попробуем добавить в строку состояния еще одну небольшую панельку с фразой «Hello, World!».

Подготовка окружения

Расширения упаковываются и распространяются в виде zip-файлов или пакетов с расширением XPI.

Вот пример типичной внутренней структуры XPI-файла:

exampleExt.xpi:
/install.rdf
/components/*
/components/cmdline.js
/defaults/
/defaults/preferences/*.js
/plugins/*
/chrome.manifest
/chrome/icons/default/*
/chrome/
/chrome/content/

Нам нужно создать структуру каталогов, похожую на эту. Для начала создайте корневую директорию расширения (например, C:\extensions\my_extension\ или ~/extensions/my_extension/ ). Внутри этого каталога создайте каталог chrome , в котором создайте каталог content .

В корневом каталоге расширения создайте два пустых текстовых файла с именами chrome.manifest и install.rdf . В итоге должна получиться структура каталогов следующего вида:

\
install.rdf
chrome.manifest
chrome\
content\

Дополнительная информация о настройке окружения находится по этой ссылке.

Сценарий установки

Откройте файл install.rdf и добавьте в него следующий текст:

  • sample@example.net — ID расширения. Это значение записывается формате email-адреса и необходимо для идентификации расширения (оно не должно быть вашим email-адресом). Сделайте его уникальным. Вы также можете использовать GUID. ПРИМЕЧАНИЕ: Хотя этот параметр и записывается в формате email-адреса, он не обязательно должен быть валидным. (example.example.example)
  • Параметр 2 — 2 указывает на то, что это будет расширение. Допустим, для тем оформления это значение должно быть установлено в 4 (все коды типов можно посмотреть тут).
  • — ID Firefox’а (прим. пер. – видимо, для Thunderbird будет другое значение).
  • 1.5 — номер минимально необходимой для работы расширения версии Firefox. Никогда не используйте символ * для указания minVersion, это может привести к неожиданным результатам.
  • 3.0.* — максимальный номер версии Firefox с которой будет работать расширение. Это значение должно быть не новее самой последней на данный момент версии браузера! В данном случае «3.0.*» указывает на то, что расширение будет работать с Firefox 3.0 и версиями 3.0.x.

Расширениям, созданным для работы с Firefox 2.0.0.x, нужно указать в качестве максимальной версию «2.0.0.*». Для расширений, созданных для работы с Firefox 1.5.0.x — «1.5.0.*».

Список обязательных и опциональных параметров сценария установки можно посмотреть тут.

Расширение браузера с использованием XUL

Пользовательский интерфейс Firefox написан с использованием XUL и JavaScript. XUL — это подвид XML, позволяющий создавать элементы пользовательского интерфейса, такие как кнопки, меню, панели управления, деревья и т.п. Все действия пользователя обрабатываются с помощью JavaScript.

Чтобы «расширить» браузер, мы изменяем отдельные части интерфейса пользователя Firefox, добавляя или модифицируя виджеты (элементы управления). Мы добавляем виджеты путем добавления новых XUL DOM-элементов в окно браузера и управляем их поведением с помощью скриптов и обработки событий.

Интерфейс браузера определен в файле browser.xul ( $FIREFOX_INSTALL_DIR/chrome/browser.jar содержит content/browser/browser.xul ) В browser.xul мы можем найти описание строки состояния, которое выглядит приблизительно так:

  1. . < statusbarpanel >.

— это «связующая точка» XUL-слоя.

XUL-слои

XUL-слои — это способ добавления виджетов в XUL-документ. XUL-слой — это .xul-файл, который определяет XUL-фрагменты, описывающие связующие точки в «основном» документе. Эти фрагменты могут указывать на виджеты, которые будут добавлены, удалены или изменены.

Пример документа XUL-слоя

  1. < overlay id ="sample"
  2. xmlns =»http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul» >
  3. < statusbarpanel id ="my-panel" label ="Hello, World" />

Тег с id, равным « status-bar » указывает на виджет браузера в который мы хотим добавить наш элемент.

Тег — это новый виджет, который мы хотим добавить.

Сохраните этот код в файле sample.xul каталога chrome/content .

Chrome URIs

XUL-файлы – это часть т.н. «Chrome Packages» — пакетов элементов пользовательского интерфейса, загружаемых через URI вида chrome:// . Вместо того, чтобы загружать интерфейс, используя URI вида file:// (тем более, расположение Firefox может быть различным в зависимости от платформы и систем), разработчики Mozilla пришли к решению создать новый вид URI, используя который все установленные приложения будут иметь доступ к содержимому XUL.

URI для окна браузера – это chrome://browser/content/browser.xul . Попробуйте ввести этот URL в адресной строке Firefox.

Chrome URI состоит из нескольких частей:

  • 1-я — протокол ( chrome ), которая сообщает сетевой библиотеке Firefox, что это Chrome URI.
  • 2-я — название пакета (в данном примере, browser ), который указывает на набор компонентов пользовательского интерфейса. Для вашего приложения эта часть должна быть уникальной, во избежание конфликтов с другими расширениями.
  • 3-я — тип запрашиваемых данных. Бывает трех типов: content (XUL, JavaScript, XBL связи и другие составляющие пользовательского интерфейса приложения), locale (DTD, файлы .properties, в которых могут быть и другие файлы, содержащие строки локализации пользовательского интерфейса) и skin (CSS и изображения темы).
  • Последняя часть – путь к загружаемому файлу.

Когда вы загружаете что-либо, оперируя Chrome URI, Firefox использует реестр Chrome (Chrome Registry) для преобразования этого URI в реальный путь к файлу на диске (или в JAR архивах).

Создание Chrome Manifest

Для получения большей информации о Chrome Manifest и всех его свойствах можно обратиться к справочному руководству.

Откройте файл chrome.manifest, который был создан в корневом каталоге вашего расширения. Добавьте следующий код:

content sample chrome/content/

(Не забудьте о закрывающем слеше, «/»! Без него пакет не будет зарегистрирован.)

  1. тип пакета chrome
  2. название пакета chrome (должно быть написано в нижнем регистре, потому что Firefox/Thunderbird в версии 2 и более ранних не поддерживают названия со смешанным регистром — баг 132183)
  3. размещение файлов пакетов chrome

Обратите внимание, что файлы контента, локализаций и скинов должны находиться внутри каталога content, locale и skin подкаталога chrome соответственно.

Сохраните файл. Теперь, когда вы запустите Firefox с вашим расширением (как это сделать, будет описано ниже), пакет chrome будет зарегистрирован.

Регистрация слоя

Теперь необходимо связать ваш слой с окном браузера. Для этого добавьте следующие строки в файл chrome.manifest :

overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul

Эти две строки указывают Firefox’у связать sample.xul и browser.xul во время загрузки browser.xul .

Тестирование

Во-первых, мы должны сообщить Firefox о нашем расширении. На стадии разработки для Firefox версии 2 и выше, вы можете указать откуда брать новое расширение, и браузер будет его загружать после каждого перезапуска.

  1. Перейдите в домашний каталог, а после в каталог, содержащий профиль Firefox, с которым вы собираетесь работать (например, Firefox/Profiles/.default/ ).
  2. Перейдите в каталог extensions/ , если его не существует, то создайте.
  3. Создайте текстовый файл и поместите в него полный путь к каталогу с вашим расширением (например, C:\extensions\my_extension\ или ~/extensions/my_extension/ ). Пользователи Windows должны помнить о направлении слешей, обязательно добавьте закрывающий слеш и удалите все замыкающие пробелы.
  4. Сохраните файл с id расширения в качестве его имени (например, sample@example.net). Без расширения файла.

Запустите Firefox. Firefox по текстовой ссылке сам найдет каталог с вашим расширением и установит его. После запуска браузера вы увидите надпись «Hello, World!» в правой части строки состояния.

Вы можете сделать некоторые изменения в .xul-файле, перезапустить Firefox, и сразу же увидите результат.

Создание пакета

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

Запакуйте архиватором zip содержимое каталога с вашим расширением (не сам каталог расширения) и измените расширение архива с .zip на .xpi.

Если вы являетесь счастливым обладателем ‘Extension Builder’-а, то он может сам сделать за вас всю грязную работу (Tools -> Extension Developer -> Extension Builder). Просто перейдите в каталог с вашим расширением и нажмите кнопку Build Extension. Это расширение имеет очень много инструментов облегчающих разработку.

Теперь загрузите получившийся .xpi-файл на ваш сервер и удостоверьтесь, что его тип установлен в application/x-xpinstall . После этого можно скачать и установить расширение.

LORPic: Пишем плагин для браузеров Mozilla Firefox и Chrome/Chromium

LORPic: Пишем плагин для браузеров Mozilla Firefox и Chrome/Chromium

Сегодня мы с вами постараемся написать маленький, но очень полезный плагин расширяющий возможности любителей юмористически-сатирической и даже немного технической площадки линуксоидов — форума linux.org.ru.

Плагин будет представлять из себя расширение для браузеров Mozilla Firefox и Chrome/Chromium, позволяющее отображать изображения непосредственно на страницах ресурса.

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

Без лирики… Поехали…

КАРТИНКИ ДЛЯ ТЕСТА

УСТАНОВКА

git clone https://git.lnx4.ru/lnx4/lorpic

В браузере перейти в настройки, далее — расширения, включить режим разработчика (для chromium, в firefox выбрать: «установить дополнение из файла») и загрузить каталог с расширением (для firefox — выбрать файл manifest.json).

Расширение работает на всех страницах форума (за исключением трекера и т. п., о чем подробнее расскажу дальше). Требуется прямая ссылка на файл изображения. Ссылка не должна отдавать html код, а должна содержать изображение с расширением jpg , jpeg или png в URL.

Подобную загрузку можно осуществить используя бесплатный сервис https://0x0.st .

Пример использования: curl -F’file=@yourfile.png’ https://0x0.st

Ответом запроса станет результирующая ссылка на изображение.

КАК ПИСАТЬ РАСШИРЕНИЯ ДЛЯ БРАУЗЕРОВ?

На это примере разберем, что именно представляет из себя плагин (расширение, WebExtensions) для браузеров. В данном случае, код практически кросс-платформенный, подходит как для Mozilla Firefox, так и для Chrome/Chromium.

Структура каталога следующая:

- chromium-lorpic --- 128-icon.png --- 32-icon.png --- 64-icon.png --- app.js --- manifest.json --- style.css 

Отличие заключается только в номере версии файла манифеста manifest.json : для firefox следует указывать версию 2, а для Chrome/Chromium — 3. Можно указать везде версию 2, но тогда Chromium будет жаловаться на deprecated (поддержка версии 2 заканчивается 2023 году).

Основную ценность для нас представляют файлы manifest.json , app.js и style.css . Разберем их по порядку.

manifest.json

В файле манифеста расположены основные настройки

< "manifest_version": 3, "name": "LORPic", "version": "1.0", "description": "Плагин отображения картинок для LOR", "icons": < "32": "32-icon.png", "64": "64-icon.png", "128": "128-icon.png" >, "content_scripts": [ < "matches": [ "*://*.linux.org.ru/gallery/*/*", "*://*.linux.org.ru/articles/*/*", "*://*.linux.org.ru/news/*/*", "*://*.linux.org.ru/forum/*/*" ], "js": [ "app.js" ], "css": [ "style.css" ] >] > 

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

app.js

(function() < // Code Here const formats = ['jpeg', 'jpg', 'png']; let links = document.querySelectorAll('a[href]:not([itemprop])'); links.forEach(function(link)< let url = link.getAttribute('href'); let ext = _getUrlExt(url); if(formats.includes(ext))< let content = link.textContent; if(content != 'Просмотр')< let image = document.createElement("img"); image.setAttribute('class', 'lorpic'); image.setAttribute('src', url); //link.replaceWith(image); link.innerHTML = ""; link.appendChild(image); link.setAttribute('target', '_blank'); >> >); function _getUrlExt(url) < return url.split('.').pop(); >>)(); 

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

В цикле проходимся по всем ссылкам доступным на странице, и если ссылка содержит префикс (для получения используется функция _getUrlExt) из массива — тогда обрабатываем. Создаем элемент изображения и вставляем его как дочерний элемент ссылки, попутно удаляя содержимое. Так же присваиваем необходимые атрибуты. Чтобы не обрабатывались ссылки на изображения находящиеся внизу текста в разделе «Галерея» — используем условие content != ‘Просмотр’

style.css

a img.lorpic

Не менее просто. Каскадные стили. В предыдущем коде мы присвоили ссылкам с изображениями атрибут class=»lorpic» , теперь делаем изображения блочным элементом, т.к. ссылки могут быть в середине текста, а картинка должна отображаться с переносами.

Свойством max-width задаем максимальную ширину изображения относительно родительского элемента страницы. 33% на мой взгляд оптимальный вариант. По клику — картинка открывается в полном разрешении в соседней вкладке, за что отвечает атрибут target=»_blank» добавленный скриптом на предыдущем шаге.

UPD1. Предлагаю указать ресурс https://0x0.st в правилах разметки форума.

UPD2. У меня нет аккаунтов разработчика под Mozilla Firefox, Chrome/Chromium, но если зайдет, не только в образовательных целях, и найдется человек готовый опубликовать расширение, — буду только рад. Со своей стороны могу пообещать доработать до нормального состояния.

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

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