Проблема CSP с iframe, загруженным из расширения Chrome - PullRequest
0 голосов
/ 21 февраля 2019

Я разрабатываю расширение Chrome, которое отображает и вставляет iframe в Gmail.

Некоторое время назад мы столкнулись с проблемой политики безопасности контента, которая сломала наше расширение и столкнулась с известной ошибкой, которая показываетв вашей консоли как

Refused to frame '[OUR DOMAIN]' because it violates the following Content Security Policy directive: ...

Чтобы исправить это, нам пришлось переписать заголовок CSP, как описано в этом сообщении в блоге .

Однако недавно мы получили ту же ошибку, даже после того, как внедрили исправление, предложенное в сообщении в блоге.

enter image description here

Как вы можете видеть, хотя мы добавили прослушиватель chrome.webRequest.onHeadersReceived для перезаписи заголовка CSP, наш домен, похоже, не работает.В результате наша боковая панель не загружается.

Примечания и попытки:

  • Обратите внимание, что при обновлении всей страницы боковая панель иногдауспешно загружен в% 50 раз, что наводит меня на мысль, что мы недостаточно быстро добавляем вышеупомянутый обработчик событий.Чтобы решить эту проблему, я вытащил прослушиватель событий из нашего фонового класса и поместил его в начало фонового js-скрипта.Однако эта проблема, кажется, все еще сохраняется.

  • Мы пытались удалить и повторно добавить расширение, но это не дало никаких постоянных результатов.

  • В ходе тестирования я также заметил, что добавление другого расширения, которое реализует аналогичное переопределение заголовка CSP, приведет к его разрыву.Удаление и повторное добавление нашего расширения возвращает нас к проблеме 50-50 в первой заметке.

[Обновление]

  • Кажется, что возможность воспроизвести его% 50 раз имеет отношение к версии Chrome.После обновления до 72 я теперь могу воспроизвести проблему.Однако выполнение жесткого обновления на странице иногда позволяет странице загружаться.

  • Подробнее о нашей настройке: То, что мы делаем, в основном имеет фон.HTML, который содержит шаблоны HTML, и у нас есть один шаблон, который содержит тег iframe.Чтобы получить шаблон с iframe, мы делаем sendMessage, получаем ответ, который является шаблоном в строке, преобразуем его в элемент DOM с помощью jquery, добавляем его в тело и изменяем атрибут src в iframe.Вначале iframe загружается нормально, но при нажатии на любую ссылку в iframe, которая перенаправляет на другую страницу, появляется та же ошибка, что и выше.

Я могу предоставить фрагменты идополнительная информация при необходимости.

...