Комментарии 9
Для внедрения js-кода в песочницу А из контент-скрипта нам может помочь следующий “хак” (здесь и далее нотация es6):
Как же они могли допустить такую дыру? =)
0
Ну закрыть эту дыру можно же только запретив доступ к DOM, а тогда пропадет весь смысл внедрения контент-скриптов расширениями. Иначе надо какие-то специальные механизмы придумывать, что, видимо, посчитали не оправданным.
0
Я просто не понимаю, зачем тогда запрещать content-скрипту доступ к переменным, если можно вот так просто это обойти?
update — кажется, понял (вспомнил). Чтобы не было конфликтов имён, а не ради какой-то защиты.
update — кажется, понял (вспомнил). Чтобы не было конфликтов имён, а не ради какой-то защиты.
0
Вы правы, не ради безопасности, а ради устранения конфликтов, но не только лишь имен. Детальнее указано в документации.
0
может отследить открытие страницы 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%), но работа с ним в целом больше похожа на веб-сокеты — отсылаеш запрос на получение данных и отдельно слушаеш ответ.
0
Через манифест, безусловно, можно, но у chrome.tabs.onUpdated есть еще одна важная задача: отследить переход на другой URL без закрытия вкладки, дав понять фоновой странице, что работа с плеером в этой вкладке закончена. Конечно и это можно иначе реализовать, но тут получается все-в-одном и инъекция контент-скрипта, и изменение URL'а.
Ну использовать ли фоновую страницу зависит, конечно же, от решаемой задачи, в случае с отображением состояния плеера можно двумя способами действовать, либо всплывающее окно при открытии создает соединение с контент-скриптом и получает состояние, либо фоновая страница постоянно получает изменения, а при открытии всплывающего окна сразу получает текущее состояние. Первый вариант даст некоторый лаг при открытии окна, что отразится негативно на юзабилити.
Ну использовать ли фоновую страницу зависит, конечно же, от решаемой задачи, в случае с отображением состояния плеера можно двумя способами действовать, либо всплывающее окно при открытии создает соединение с контент-скриптом и получает состояние, либо фоновая страница постоянно получает изменения, а при открытии всплывающего окна сразу получает текущее состояние. Первый вариант даст некоторый лаг при открытии окна, что отразится негативно на юзабилити.
0
Сто́ит, наверное, упомянуть про https://github.com/yeoman/generator-chrome-extension
+1
Я данный генератор не использовал, весь мой опыт с ним связанный это предложение одного человека интегрировать мой автодеплой расширений в данный генератор.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Понятие песочницы при разработке расширений для браузера Google Chrome