Как стать автором
Обновить

Комментарии 9

Для внедрения js-кода в песочницу А из контент-скрипта нам может помочь следующий “хак” (здесь и далее нотация es6):


Как же они могли допустить такую дыру? =)
Ну закрыть эту дыру можно же только запретив доступ к DOM, а тогда пропадет весь смысл внедрения контент-скриптов расширениями. Иначе надо какие-то специальные механизмы придумывать, что, видимо, посчитали не оправданным.
Я просто не понимаю, зачем тогда запрещать content-скрипту доступ к переменным, если можно вот так просто это обойти?

update — кажется, понял (вспомнил). Чтобы не было конфликтов имён, а не ради какой-то защиты.
Вы правы, не ради безопасности, а ради устранения конфликтов, но не только лишь имен. Детальнее указано в документации.
может отследить открытие страницы music.yandex.ru используя chrome.tabs.onUpdated и внедрить наш код (контент-скрипт) на витрину через chrome.tabs.executeScript


Можно же через manifest.json это сделать, просто прописать в «content_scripts» необходимые matches и js, а дальше получение доступа к скриптам страницы уже по Вашей схеме. Или это критично для получения доступа к js страницы?

Для связи компонентов расширения между собой лично я использую chrome.runtime.sendMessage или chrome.runtime.connect, не используя доступ к фоновой странице напрямую. При большом количестве запросов chrome.runtime.connect предпочтительнее, поскольку он меньше грузит процессор (при переходе на порты, нагрузка на процессор уменьшилась з 34% до 5%), но работа с ним в целом больше похожа на веб-сокеты — отсылаеш запрос на получение данных и отдельно слушаеш ответ.
Через манифест, безусловно, можно, но у chrome.tabs.onUpdated есть еще одна важная задача: отследить переход на другой URL без закрытия вкладки, дав понять фоновой странице, что работа с плеером в этой вкладке закончена. Конечно и это можно иначе реализовать, но тут получается все-в-одном и инъекция контент-скрипта, и изменение URL'а.

Ну использовать ли фоновую страницу зависит, конечно же, от решаемой задачи, в случае с отображением состояния плеера можно двумя способами действовать, либо всплывающее окно при открытии создает соединение с контент-скриптом и получает состояние, либо фоновая страница постоянно получает изменения, а при открытии всплывающего окна сразу получает текущее состояние. Первый вариант даст некоторый лаг при открытии окна, что отразится негативно на юзабилити.
Сто́ит, наверное, упомянуть про https://github.com/yeoman/generator-chrome-extension
Я данный генератор не использовал, весь мой опыт с ним связанный это предложение одного человека интегрировать мой автодеплой расширений в данный генератор.
Ну он boilerplate неплохой генерирует, когда открываешь редактор с мыслью «а создам-ка я свое первое расширение» — очень ценная помощь.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории