HOWTO: Внедрение пользовательского интерфейса на сайт с помощью расширения браузера


TL,DR:

pnpm create plasmo inject-ui
cd inject-ui
touch content.tsx
Войдите в полноэкранный режим Выход из полноэкранного режима

content.tsx

const Overlay = () => (<h1>HELLO WORLD</h1>)
export default Overlay
Войти в полноэкранный режим Выход из полноэкранного режима
pnpm dev
Войти в полноэкранный режим Выйти из полноэкранного режима

Загрузите расширение в Chrome, обновите, и вы увидите HELLO WORLD в верхней части веб-страницы.


Пояснения

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

Существует 3 решения вышеуказанной проблемы:

A. Оформить элемент тегом style, который делает css unset.

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

B. Рендерить элемент внутри iframe.

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

C. Рендеринг элемента внутри теневого DOM.

C — лучшая техника для веб-расширения. Представленная как ключевая часть API веб-компонентов, идея заключается в том, что теневой DOM — это отдельный DOM, присоединенный к основному DOM. Ничто внутри него не может повлиять на основной DOM. Фреймворк Plasmo использует эту технику за сценой, чтобы обеспечить бесшовное внедрение компонента React в любую веб-страницу. Мы называем эту возможность «контент-скрипт UI».

Оцените статью
devanswers.ru
Добавить комментарий