Ich habe gerade von 2.5.0.beta4 auf 2.5.0.beta5 aktualisiert, und jetzt laufen meine beiden Skripte in meinem Theme nicht mehr. In der Browserkonsole sehe ich Folgendes:
Edit: Es scheint, dass ich diese Fehler auch auf meiner anderen Seite erhalte, auf der ich dasselbe Theme nicht verwende, also liegt das Problem nicht am Theme. Ich vermute also, dass sich die Theme-API geändert hat? Obwohl dieses Thema nicht aktualisiert wurde: Using the JS API
Im Grunde scheint es, dass das neue Discourse-Update die CSP strenger gemacht hat.
Wie gehe ich vor, um dies zu beheben? In den Release-Notes habe ich nichts zu CSP- oder Theme-Änderungen gefunden.
Hier ist mein Skript, das ausgeführt werden soll:
<script type="text/discourse-plugin" version="0.0.1">
api.onPageChange(() => {
checkMainPageLoadFeeds();
});
function checkMainPageLoadFeeds() {
// Nur auf der Hauptseite laden
// Anscheinend funktioniert dies aufgrund der Funktionsweise von Discourse nicht perfekt,
// aber es verursacht zumindest keine Probleme...
if(/https?:\/\/[^\/]+\/(categories)?$/.test(window.location.href) ){
// Diese Dateien werden von einem Bot erstellt, der auf demselben Server wie dieses Forum läuft
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>
Und dies ist das zweite:
<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 {
// Vielleicht Passwort vergessen
let element = $(".fixed-modal .forgot-password-modal")
if(element){
element.append(getEmailSpamCheckMessage(false));
}
}
});
function getEmailSpamCheckMessage(register){
return $.parseHTML("<p class='EmailNoteMessage'>Wenn Sie keine E-Mail erhalten " +
(register ? "Bestätigung " : "") + "überprüfen Sie Ihren Spam-Ordner.<br>" +
"Sie können auch unseren <a href='https://discordapp.com/invite/FZxDQ4H'>Discord</a> besuchen, " +
"wenn Sie Probleme haben " + (register ? "bei der Registrierung" : "E-Mails von uns zu erhalten") + ".</p>");
}
</script>
Ich bin mir sicher, dass ich dies hier auf Meta bereits gepostet habe, kann den Beitrag aber jetzt nicht finden.
Ich glaube nicht, dass mein Problem mit CSP zusammenhängt, da ich dieselben zwei Fehler auch auf einer Seite erhalte (https://forum.revolutionarygamesstudio.com/), die das Standard-Theme verwendet. Es scheint also, als würden meine Skripte gar nicht erst geladen werden. Auf der Seite mit einem benutzerdefinierten Theme bleiben die Felder nahe der Kopfzeile leer, da JavaScript zum Befüllen verwendet wird: https://community.revolutionarygamesstudio.com/
Ich habe auch versucht, CSP im Admin-Bereich ein- und auszuschalten, aber das hat meine Skripte nicht behoben, obwohl die zwei Fehler verschwunden sind (nur noch einer stammt von retort).
Edit: Ich vermute, dass sich etwas geändert hat, wodurch <script type="text/discourse-plugin" version="0.0.1"> überhaupt nicht mehr geladen werden.
Edit 2: Selbst mit aktiviertem CSP und ohne Einträge in der Whitelist funktioniert folgendes:
<script>
console.log('this loaded just fine');
</script>
Dieses jedoch nicht:
<script type="text/discourse-plugin" version="0.0.1">
console.log('this loaded just fine');
</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)
Bezüglich der anderen Seite: Ich kann checkMainPageLoadFeeds im Quellcode nicht finden, daher bin ich mir nicht sicher, ob dieser geladen wird.
Das sehe ich auch. Siehe mein Update im vorherigen Beitrag: Es scheint, dass das Skript vom Typ "text/discourse-plugin" nicht ausgeführt wird, aber ein ganz normales Skript-Tag schon.
Das ist mir aufgefallen. Ich habe die neueste Retort-Version:
Bedeutet das, dass ein Fehler in diesem Plugin verhindert, dass das im Theme definierte Plugin ausgeführt wird?
Das Neu-Erstellen ohne Retort in meiner Plugin-Liste ‘behoben’ das Problem. Danke für die Hilfe. Ich hatte nicht bedacht, dass ein fehlerhaftes Plugin auch andere Plugins beeinträchtigen könnte. Ich werde mir das für die Zukunft merken und vor der Meldung eines Problems prüfen.
Ich markiere dies als Lösung, während ich auf eine neue Version von Retort warte, damit ich es wieder aktivieren kann.
Es scheint, dass Probleme mit dem neuesten Discourse bereits gemeldet wurden: