У меня есть ситуация, когда объявление имеет определение 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?
В Firefox Nightly работает нормально. Не могли бы вы сказать мне, как проверить, когда он будет выпущен как казуальный релиз?
См. wiki.mozilla.org/Release_Management/Календарь. Выпуск Firefox 69 запланирован на 03 сентября 2019 г. (3 сентября 2019 г.).
В следующий раз, когда вы думаете, что нашли ошибку в Firefox, не стесняйтесь сообщать об ошибке. Я знаю, что Bugzilla может быть немного пугающей, но вы поймете, что проще связаться с разработчиками Firefox по адресу bugzilla.mozilla.org.
Я запускал мозрегрессия поверх бета-версии и ночных сборок Firefox. Похоже, что jsfiddle успешно загружает вещи по третьему нажатию кнопки, начиная со сборок, содержащих патчи от Mozilla ошибка 965637, которые приземлился в багажнике 21 мая 2019 г. (21 мая 2019 г.).
Так что это ошибка в Firefox 67 (и, возможно, в более ранних версиях тоже), но с тех пор она была исправлена, и исправление будет включено в Выпуск Firefox 69 запланирован на 03 сентября 2019 г. (3 сентября 2019 г.).
Однако, к сожалению, исправление не было сделано вовремя, чтобы попасть в ветку для Firefox 68, поэтому ошибка все еще будет присутствовать в файле Выпуск Firefox 68 запланирован на 09 июля 2019 г. (9 июля 2019 г.).
Хорошо, я могу воспроизвести это в Firefox 68, но с Firefox Nightly 69.0a1 (2019-06-13), пробуя
https://jsfiddle.net/54Luhjan/1/
и выполняя шаги, описанные в вопросе, я не могу воспроизвести проблему, описанную в вопросе. Похоже, это ошибка, которая существует в Firefox 68 (и, возможно, в более ранних версиях), но с тех пор она исправлена. Может быть, вы сами попробуете протестировать это в Firefox Nightly и подтвердите, если вы больше не видите ту же проблему?