Я разрабатываю расширение Chrome, которое отображает и вставляет iframe в Gmail.
Некоторое время назад мы столкнулись с проблемой политики безопасности контента, которая сломала наше расширение и столкнулась с известной ошибкой, которая показываетв вашей консоли как
Refused to frame '[OUR DOMAIN]' because it violates the following Content Security Policy directive: ...
Чтобы исправить это, нам пришлось переписать заголовок CSP, как описано в этом сообщении в блоге .
Однако недавно мы получили ту же ошибку, даже после того, как внедрили исправление, предложенное в сообщении в блоге.
Как вы можете видеть, хотя мы добавили прослушиватель chrome.webRequest.onHeadersReceived
для перезаписи заголовка CSP, наш домен, похоже, не работает.В результате наша боковая панель не загружается.
Примечания и попытки:
Обратите внимание, что при обновлении всей страницы боковая панель иногдауспешно загружен в% 50 раз, что наводит меня на мысль, что мы недостаточно быстро добавляем вышеупомянутый обработчик событий.Чтобы решить эту проблему, я вытащил прослушиватель событий из нашего фонового класса и поместил его в начало фонового js-скрипта.Однако эта проблема, кажется, все еще сохраняется.
Мы пытались удалить и повторно добавить расширение, но это не дало никаких постоянных результатов.
В ходе тестирования я также заметил, что добавление другого расширения, которое реализует аналогичное переопределение заголовка CSP, приведет к его разрыву.Удаление и повторное добавление нашего расширения возвращает нас к проблеме 50-50 в первой заметке.
[Обновление]
Кажется, что возможность воспроизвести его% 50 раз имеет отношение к версии Chrome.После обновления до 72 я теперь могу воспроизвести проблему.Однако выполнение жесткого обновления на странице иногда позволяет странице загружаться.
Подробнее о нашей настройке: То, что мы делаем, в основном имеет фон.HTML, который содержит шаблоны HTML, и у нас есть один шаблон, который содержит тег iframe.Чтобы получить шаблон с iframe, мы делаем sendMessage
, получаем ответ, который является шаблоном в строке, преобразуем его в элемент DOM с помощью jquery, добавляем его в тело и изменяем атрибут src в iframe.Вначале iframe загружается нормально, но при нажатии на любую ссылку в iframe, которая перенаправляет на другую страницу, появляется та же ошибка, что и выше.
Я могу предоставить фрагменты идополнительная информация при необходимости.