Я только что обновился с версии 2.5.0.beta4 до 2.5.0.beta5, и теперь два моих скрипта, которые находятся в моей теме, перестали работать. В консоли браузера я вижу следующее:
Content Security Policy: Настройки сайта заблокировали загрузку ресурса из inline ("script-src"). injectGlobalHook.js:1:1760
Content Security Policy: Настройки сайта заблокировали загрузку ресурса из inline ("script-src"). pagewrap.bundle.js:1:1151
Редактирование: похоже, эти сообщения появляются и на моём другом сайте, где установлена другая тема, так что проблема не в теме. Значит, API темы изменился? Хотя эта тема на форуме не обновлялась: Using the JS API
По сути, похоже, что новое обновление Discourse сделало CSP более строгим.
Как мне это исправить? В примечаниях к выпуску я ничего не нашёл о CSP или изменениях в темах.
Вот мой скрипт, который я хочу запустить:
<script type="text/discourse-plugin" version="0.0.1">
api.onPageChange(() => {
checkMainPageLoadFeeds();
});
function checkMainPageLoadFeeds() {
// Загружать только на главной странице
// Похоже, это работает не идеально из-за особенностей работы Discourse,
// но хотя бы не вызывает никаких проблем...
if(/https?:\/\/[^\/]+\/(categories)?$/.test(window.location.href) ){
// Эти файлы создаются ботом, работающим на том же сервере, что и этот форум
if($("#development-info").text() == ""){
$("#development-info").load("/thrive-feed-bot/devforum-and-github");
$("#announcement-contents").load("/thrive-feed-bot/community-announcements");
}
}
$("#development-heading").off("click").on("click", expandTheFeeds);
$("#announcement-heading").off("click").on("click", expandTheFeeds);
}
function expandTheFeeds(){
let target = $("#development-feed").height() == 200 ? 450 : 200;
$('#development-feed').animate({ height: target + "px" });
$('#development-info').animate({ height: (target - 95) + "px" });
$('#announcement-feed').animate({ height: target + "px" });
$('#announcement-contents').animate({ height: (target - 95) + "px" });
}
$( document ).ready(function(){
checkMainPageLoadFeeds();
})
</script>
А вот второй скрипт:
<script type="text/discourse-plugin" version="0.0.1">
api.onAppEvent('modal:body-shown', (data) => {
if(data.title){
if(data.title.match(/.*create.*account.*/)){
$(".create-account.fixed-modal .modal-footer").prepend(getEmailSpamCheckMessage(true));
}
} else {
// Возможно, это восстановление пароля
let element = $(".fixed-modal .forgot-password-modal")
if(element){
element.append(getEmailSpamCheckMessage(false));
}
}
});
function getEmailSpamCheckMessage(register){
return $.parseHTML("<p class='EmailNoteMessage'>Если вы не получили письмо " +
(register ? "подтверждения ", "") + "проверьте папку со спамом.<br>" +
"Вы также можете посетить наш <a href='https://discordapp.com/invite/FZxDQ4H'>Discord</a> " +
"если у вас возникли проблемы " + (register ? "с регистрацией" : "с получением писем от нас") + ".</p>");
}
</script>
Я уверен, что уже публиковал их здесь, на meta, но сейчас не могу найти тот пост.
