У меня есть расширение Chrome, которое начало испытывать проблемы из-за изменений CSP на целевой странице.
Расширение имеет контент-скрипт, который создает новое окно, используя window.open
- назовем его окном отчета. Это окно содержит динамически генерируемый и загружаемый отчет. Активность пользователя на целевой странице генерирует содержимое в окне отчета - аналогично журналу активности, в котором заголовок отображается как anchor
, а при нажатии anchor
он переключает отображение сведений <section>
, чтобы сделать их видимыми / невидимый, используя код, подобный приведенному ниже
<a href="javascript:toggleDisplay('detail-1')">Data #1</a>
<a href="javascript:toggleDisplay('detail-2')">Data #2</a>
<a href="javascript:toggleDisplay('detail-3')">Data #3</a>
Необходимые функции динамически добавляются в документ с использованием кода, аналогичного приведенному ниже
let script = document.createElement('script');
script.text = code.join('\n');
doc.head.appendChild(script);
В окне отчета имеется много таких записей, и они создаются не сразу, а в ответ на действия пользователя.
Это все работает отлично и денди. Но недавно веб-сайт ввел ограничения CSP для встроенного кода JavaScript.
Content-Security-Policy: script-src 'sha256-6gLjSWp3GRKZCUFvRalksdfkahsdfX5aGHtECD1wVRg=' 'unsafe-inline' ...
Из-за этого мои данные section
не открываются, когда пользователь щелкает заголовок тега anchor
и отображает на консоли ошибку ниже
Refused to run the JavaScript URL because it violates the following Content Security Policy directive...
Это то, что я хочу знать
- Можно ли ослабить или сбросить CSP во вновь созданном дочернем окне? Если да, то как? Я знаю, что метатеги не могут ослабить это, но только ограничивают его.
- Как мне выполнить эту новую директиву CSP, если отчет представляет собой динамически генерируемый DOM. Кроме того, мне нужно, чтобы этот отчет был загружаемым, в настоящее время я могу легко загрузить DOM документа в html, чтобы предоставить отчет. Похоже, мне, возможно, придется предоставить отчет MHT, если сценарии должны быть помещены в отдельный документ. Я даже не уверен, как предоставить скрипт в отдельном документе, учитывая, что это расширение chrome