Хобрук: Ваш путь к мастерству в программировании

Разрешения на изменение DOM в контекстном меню расширения Chrome

У меня есть промежуточные знания в области разработки расширений для Chrome.

Контекст:

  • Манифест имеет разрешения activeTab и contextMenus.
  • Щелчок по элементу контекстного меню должен вводить содержимое в DOM.
  • Это отлично работает для обычных веб-страниц, но не работает в средстве просмотра Chrome PDF по умолчанию со следующей ошибкой:
Cannot access contents of the page. Extension manifest must request permission to access the respective host.

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

SO,

Почему действие контекстного меню не может добавить узел DOM на страницу PDF (когда работает обычная страница)

И почему работает добавление узла DOM с помощью ключевой команды, а затем его изменение с помощью действия контекстного меню?

РЕДАКТИРОВАТЬ: код, который не работает при использовании действия контекстного меню:

введенный-content.js

let wrapper = document.getElementById(SUTRA_ELEMENT)

if (!wrapper) {
  wrapper = document.createElement('div')
  wrapper.id = SUTRA_ELEMENT
  document.body.prepend(wrapper)
}

// modify wrapper

Это приводит к указанной выше ошибке при запуске через действие контекстного меню в средстве просмотра Chrome PDF. Однако он работает правильно при запуске через ключевую команду. После запуска с помощью ключевой команды запуск с помощью действия контекстного меню позволяет изменить уже добавленный элемент.


  • Встроенное средство просмотра PDF — это страница пользовательского интерфейса браузера, которая обрабатывается встроенным расширением компонента, отображаемым внутри iframe (devtools как бы скрывает его), поэтому вы не можете изменить его содержимое. Вы можете изменить содержимое основного документа во вкладке. Если вам нужна дополнительная информация, покажите код. 16.03.2020
  • Таким образом, я могу успешно вводить контент с помощью ключевой команды (она запускает тот же код, что и действие контекстного меню). Так что эта часть работает правильно. Просто контекстное меню по какой-то причине не использует разрешение activeTab. 16.03.2020
  • О, я вижу это по ссылке, которую вы дали. Все, что я хотел, это чтобы вы включили эти части в вопрос, чтобы мне не пришлось изучать весь ваш background.js... 16.03.2020
  • Таким образом, разница в том, что commands API предоставляет разрешения для основного документа вкладки, куда вы можете вводить данные, но contextMenus активирует фрейм, в котором пользователь вызывает меню, и этот фрейм является расширением компонента, которое показывает PDF, вы не можете изменить его. Вы можете отправить отчет об ошибке на crbug.com. 16.03.2020
  • Да, фактический код в основном находится в 5 разных местах, поэтому я не знал, будет ли мне иметь смысл переплести вас через них или просто дать вам код :) Ваше объяснение имеет смысл, но почему я могу получить доступ элемент, созданный commands из фрейма PDF с помощью contextMenus? 16.03.2020
  • После того, как commands предоставит разрешения для главной вкладки, ваши последующие внедренные скрипты контента смогут использовать его. 16.03.2020
  • Ах понял, спасибо. 16.03.2020

Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..