Ho appena aggiornato dalla versione 2.5.0.beta4 alla 2.5.0.beta5 e ora i miei due script inseriti nel tema non sembrano più funzionare. Nella console del browser vedo quanto segue:
Content Security Policy: Le impostazioni del sito hanno impedito il caricamento della risorsa da inline ("script-src"). injectGlobalHook.js:1:1760
Content Security Policy: Le impostazioni del sito hanno impedito il caricamento della risorsa da inline ("script-src"). pagewrap.bundle.js:1:1151
Modifica: sembra che questi errori compaiano anche sul mio altro sito, dove non ho lo stesso tema, quindi il problema non è lì. Immagino quindi che l’API del tema sia cambiata? Anche se questo argomento non è stato aggiornato: Using the JS API
In sostanza, sembra che il nuovo aggiornamento di Discourse abbia reso la CSP più restrittiva.
Come posso risolvere il problema? Non ho trovato nulla relativo alla CSP o a modifiche del tema nelle note di rilascio.
Questo è lo script che vorrei far eseguire:
<script type="text/discourse-plugin" version="0.0.1">
api.onPageChange(() => {
checkMainPageLoadFeeds();
});
function checkMainPageLoadFeeds() {
// Carica solo sulla pagina principale
// Sembra che questo non funzioni perfettamente a causa del modo in cui funziona Discourse,
// ma almeno non causa problemi...
if(/https?:\/\/[^\/]+\/(categories)?$/.test(window.location.href) ){
// Questi file sono creati da un bot in esecuzione sullo stesso server di questo 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>
E questo è il secondo:
<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 {
// Potrebbe essere "password dimenticata"
let element = $(".fixed-modal .forgot-password-modal")
if(element){
element.append(getEmailSpamCheckMessage(false));
}
}
});
function getEmailSpamCheckMessage(register){
return $.parseHTML("<p class='EmailNoteMessage'>Se non ricevi un'email " +
(register ? "di conferma " : "") + "controlla la cartella spam.<br>" +
"Puoi anche visitare il nostro <a href='https://discordapp.com/invite/FZxDQ4H'>Discord</a> " +
"se hai problemi " + (register ? "di registrazione" : "a ricevere le nostre email") + ".</p>");
}
</script>
Sono certo di aver già pubblicato questo codice qui su Meta, ma non riesco a trovare quel post ora.
Non credo che il mio problema sia legato a CSP, poiché ricevo gli stessi due errori su un sito (https://forum.revolutionarygamesstudio.com/) che utilizza il tema predefinito. Sembra quindi che i miei script non vengano nemmeno tentati di essere caricati. Sul sito con un tema personalizzato, le caselle vicino alla parte superiore della pagina rimangono vuote poiché vengono riempite tramite JavaScript: https://community.revolutionarygamesstudio.com/
Ho anche provato a disattivare CSP nella sezione amministrativa, ma questo non ha risolto il problema dei miei script, sebbene abbia fatto scomparire i due errori (lasciandone solo uno proveniente da retort).
Modifica: Quindi penso che qualcosa sia cambiato, impedendo il caricamento di <script type="text/discourse-plugin" version="0.0.1">.
Modifica 2: Quindi, anche con CSP abilitato e nulla aggiunto alla whitelist, questo funziona:
<script>
console.log('questo è stato caricato senza problemi');
</script>
Mentre questo non funziona:
<script type="text/discourse-plugin" version="0.0.1">
console.log('questo è stato caricato senza problemi');
</script>
_retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188 Uncaught TypeError: Impossibile leggere la proprietà 'retort_disabled_categories' di 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)
Per quanto riguarda l’altro sito, non riesco a trovare checkMainPageLoadFeeds nel codice sorgente, quindi non sono sicuro che sia caricato.
È quello che vedo anch’io. Guarda il mio aggiornamento nel post precedente: sembra che lo script con tipo "text/discourse-plugin" non venga eseguito, mentre un tag script normale sì.
L’ho notato anch’io, ho l’ultima versione di retort:
Quindi il fatto che questo plugin abbia un errore sta impedendo l’esecuzione del plugin definito nel tema?
Ricostruire senza retort nella mia lista di plugin ‘risolve’ il problema. Grazie per l’aiuto. Non avevo considerato che il fallimento di un singolo plugin potesse causare il fallimento anche di altri. Cercherò di ricordarmelo in futuro per verificare prima di segnalare un problema.
Segnalerò questa come soluzione, nel frattempo che aspetto una nuova versione di retort per poterla riattivare.
Sembra che i problemi con l’ultima versione di Discourse siano già stati segnalati: