У меня есть ситуация, когда у объявления есть определение CSP внутри iframe. В Chrome проблем нет, но в Firefox после загрузки рекламы CSP влияет на всю страницу, и я не могу загрузить другие ресурсы.
Вы можете увидеть проблему с этим примером:
<html>
<head>
<script>
function getScript(url) {
let tag = document.createElement('script');
tag.src = url;
tag.onload = () => document.getElementById('console').innerHTML += url + " loaded<br>";
document.body.appendChild(tag);
}
function getFromCdnFirst() {
getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js');
}
function getFromCdnSecond() {
getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.min.js');
}
function getIframeWithCSP() {
var doc = document.getElementById('iframe').contentWindow.document;
doc.open();
doc.write('<html><head><meta http-equiv="Content-Security-Policy" content="script-src https://cdn.ampproject.org/;object-src '+"'none';child-src blob:;frame-src 'none'" + '"></head><body>Test</body>');
doc.close();
}
</script>
</head>
<body>
<iframe id="iframe"></iframe><br>
<button onClick="getFromCdnFirst()">Get script</button><br>
<button onClick="getIframeWithCSP()">Get CSP</button><br>
<button onClick="getFromCdnSecond()">Get script</button><br>
<div id="console">
</div>
</body>
Также доступно здесь: https://jsfiddle.net/54Luhjan/1/
После того, как вы нажали первую кнопку, загрузилась js, вторая ссылка вставляет CSP в iframe, и после этого скрипты не могут быть загружены - CSP предотвращает это.
Есть ли у вас какие-либо идеи о том, что можно сделать, чтобы внешний CSP не повредил мою страницу?
Это ошибка Firefox?