لقد قمت للتو بالترقية من الإصدار 2.5.0.beta4 إلى 2.5.0.beta5، والآن لا يبدو أن السكربتات الخاصة بي الموجودة في السمة الخاصة بي تعمل، وأرى هذا في وحدة تحكم المتصفح:
سياسة أمان المحتوى: تمنع إعدادات الموقع تحميل المورد من مضمن ("script-src"). injectGlobalHook.js:1:1760
سياسة أمان المحتوى: تمنع إعدادات الموقع تحميل المورد من مضمن ("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>
وهو ما أتذكر أنني نشرته هنا في الميتا من قبل، لكن لا أستطيع العثور على ذلك المنشور الآن.
لا أعتقد أن مشكلتي تتعلق بـ CSP، حيث أنني أحصل على نفس الخطأين في موقع (https://forum.revolutionarygamesstudio.com/) الذي يستخدم السمة الافتراضية. لذا يبدو أن نصوصي البرمجية لا يتم حتى محاولة تحميلها. في الموقع الذي يحتوي على سمة مخصصة، تظل المربعات القريبة من أعلى الصفحة فارغة لأن JavaScript يُستخدم لملئها: https://community.revolutionarygamesstudio.com/
لقد جربت أيضًا تعطيل CSP في قسم الإدارة، لكن ذلك لم يُصلح نصوصي البرمجية، بل جعل الخطأين يختفيان (مُتاركًا خطأً واحدًا فقط قادمًا من retort).
تعديل: لذا أعتقد أن شيئًا ما تغير مما يجعل <script type="text/discourse-plugin" version="0.0.1"> لا يتم تحميلها على الإطلاق بعد الآن.
تعديل 2: لذا حتى مع تمكين CSP وعدم إضافة أي شيء إلى القائمة البيضاء، يعمل هذا:
<script>
console.log('this loaded just fine');
</script>
لكن هذا لا يعمل:
<script type="text/discourse-plugin" version="0.0.1">
console.log('this loaded just fine');
</script>
_retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188 خطأ غير مُلتقط من نوع TypeError: لا يمكن قراءة الخاصية 'retort_disabled_categories' من غير معرف
عند _retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188
عند t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74640)
عند t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
عند require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
عند f (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74596)
عند _ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74561
عند t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74639)
عند t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
عند require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
عند t._prepareInitializer (_application-66bcc4126a5a02dd0d99aed67150087a79a427788cc00feaf5e17bf042b73d75.js:6849)
بخصوص الموقع الآخر، لا أستطيع العثور على checkMainPageLoadFeeds في كود المصدر، لذا لا أ确信 ما إذا كان محملاً.
إعادة البناء دون إضافة retort إلى قائمة الإضافات الخاصة بي “تحل” المشكلة. شكرًا على المساعدة. لم أفكر في أن فشل إضافة واحدة قد يتسبب في فشل أي إضافة أخرى أيضًا. سأحاول تذكر ذلك في المستقبل والتحقق قبل الإبلاغ عن مشكلة.
سأشير إلى هذا الحل، بينما أنتظر إصدارًا جديدًا من retort حتى أتمكن من تمكينه مرة أخرى.
يبدو أن مشاكل الإصدار الأخير من discourse تم الإبلاغ عنها بالفعل: