Je viens de passer de la version 2.5.0.beta4 à la 2.5.0.beta5 et maintenant mes deux scripts dans mon thème ne semblent plus s’exécuter. Voici ce que je vois dans la console de mon navigateur :
Content Security Policy : Les paramètres du site ont empêché le chargement de la ressource depuis inline ("script-src"). injectGlobalHook.js:1:1760
Content Security Policy : Les paramètres du site ont empêché le chargement de la ressource depuis inline ("script-src"). pagewrap.bundle.js:1:1151
Édition : il semble que j’obtienne ces messages sur mon autre site également, où je n’ai pas le même thème, donc ce n’est pas le problème. Je suppose donc que l’API du thème a changé ? Même si ce sujet n’a pas été mis à jour : Using the JS API
En gros, il semble que la nouvelle mise à jour de Discourse ait rendu la CSP plus stricte.
Comment puis-je résoudre ce problème ? Je n’ai rien trouvé concernant la CSP ou les changements de thème dans les notes de version.
Voici mon script que je souhaite exécuter :
<script type="text/discourse-plugin" version="0.0.1">
api.onPageChange(() => {
checkMainPageLoadFeeds();
});
function checkMainPageLoadFeeds() {
// Charger uniquement sur la page principale
// Apparemment, cela ne fonctionne pas parfaitement en raison du fonctionnement de Discourse,
// mais au moins cela ne cause aucun problème...
if(/https?:\/\/[^\/]+\/(categories)?$/.test(window.location.href) ){
// Ces fichiers sont créés par un bot tournant sur le même serveur que ce forum
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>
Et voici le deuxième :
<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 {
// Peut-être mot de passe oublié
let element = $(".fixed-modal .forgot-password-modal")
if(element){
element.append(getEmailSpamCheckMessage(false));
}
}
});
function getEmailSpamCheckMessage(register){
return $.parseHTML("<p class='EmailNoteMessage'>Si vous ne recevez pas d'email " +
(register ? "de confirmation " : "") + "vérifiez votre dossier spam.<br>" +
"Vous pouvez également visiter notre <a href='https://discordapp.com/invite/FZxDQ4H'>Discord</a> " +
"si vous rencontrez des problèmes " + (register ? "d'inscription" : "pour recevoir nos emails") + ".</p>");
}
</script>
Je suis sûr de l’avoir déjà posté ici sur Meta, mais je ne parviens pas à retrouver ce message maintenant.
Je ne pense pas que mon problème vienne de la CSP, car je rencontre les mêmes deux erreurs sur un site (https://forum.revolutionarygamesstudio.com/) qui utilise le thème par défaut. Il semble donc que mes scripts ne soient même pas tentés d’être chargés. Sur le site avec un thème personnalisé, les zones près du haut de la page restent vides car du JavaScript est utilisé pour les remplir : https://community.revolutionarygamesstudio.com/
J’ai également essayé de désactiver la CSP dans la section d’administration, mais cela n’a pas semblé corriger mes scripts, bien que cela ait fait disparaître les deux erreurs (il n’en reste qu’une provenant de retort).
Édition : Je pense donc que quelque chose a changé, ce qui fait que les balises <script type="text/discourse-plugin" version="0.0.1"> ne se chargent plus du tout.
Édition 2 : Même avec la CSP activée et rien ajouté à la liste blanche, ceci fonctionne :
<script>
console.log('cela s\'est chargé sans problème');
</script>
Mais ceci ne fonctionne pas :
<script type="text/discourse-plugin" version="0.0.1">
console.log('cela s\'est chargé sans problème');
</script>
_retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188 Uncaught TypeError: Cannot read property 'retort_disabled_categories' of undefined
at _retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74640)
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
at require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
at f (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74596)
at _ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74561
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74639)
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
at require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
at t._prepareInitializer (_application-66bcc4126a5a02dd0d99aed67150087a79a427788cc00feaf5e17bf042b73d75.js:6849)
Concernant l’autre site, je ne trouve pas checkMainPageLoadFeeds dans le code source, donc je ne suis pas sûr qu’il soit chargé.
C’est ce que je constate. Voir ma mise à jour dans le message précédent : il semble que le script de type "text/discourse-plugin" ne s’exécute pas, mais qu’une balise script ordinaire fonctionne.
Je l’ai remarqué, j’ai la dernière version de retort :
Donc le fait que ce plugin génère une erreur empêche le plugin défini dans le thème de s’exécuter ?
Reconstruire sans Retort dans ma liste de plugins « résout » le problème. Merci pour l’aide. Je n’avais pas envisagé qu’un plugin défaillant puisse en faire échouer un autre. Je garderai cela à l’esprit à l’avenir et vérifierai avant de signaler un problème.
Je vais marquer cela comme solution, en attendant une nouvelle version de Retort pour pouvoir le réactiver.
Il semble que des problèmes avec la dernière version de Discourse aient déjà été signalés :