حسناً… ما زلت في رحلتي لجعل خادم الإعلانات الخاص بي يعمل على منصة Discourse. لقد صادفت لغزاً لا أستطيع حله. باستخدام ميزة تحرير المظهر، أضفت طلب السكربت الخاص بي إلى كل من </body> و ‘footer’.
إذا تمت إضافة السكربت إلى ‘footer’ (أو ‘بعد الرأس’)، يفشل الكود. رغم أنه في وضع الفحص يبدو النص المشفر صحيحاً. انظر أدناه:
كما أنني لا أستطيع حتى الآن جعل إعلانات AdSense تعمل بشكل مستقل، لكن ربما المشكلة من جانبهم ولم يقوموا بعد بفحص الموقع لمعرفة ما يجب عرضه. غريب أن يستغرق الأمر كل هذا الوقت.
حسنًا، لاحظت أن سجل CSP يُظهر أن سكريبت إعلانات جوجل يتم حظره، لذا أضفت
https://pagead2.googlesyndication.com
إلى قائمة مصادر السكريبت في CSP، وعندها بدأت إعلانات Google AdSense الخاصة بي تظهر (أنا مندهش بعض الشيء من أنه لا يزال يتعين عليك فعل ذلك حتى مع تثبيت مكون الإضافات AdSense). لكن ما لاحظته هو أنه عندما تكون إعلاناتي المنزلية مضبوطة على 100% (بحيث يتم استدعاء سكريبتي فقط)، لا أحصل على أي إشعار في CSP بوجود مشكلة. وهذا يعيدني مرة أخرى إلى حالة الارتباك. كود الإعلان المنزلي موجود في HTML (مشفر) ويظهر كما هو موضح أعلاه في عرض فحص المتصفح.
هل هناك شيء ما يمنع الإخراج لكنه لا يُفعّل تحذير CSP؟
الإخراج يستخدم document.write لإنشاء مساحة الإعلان. وأنا أظن أن هذا هو السبب. يبدو الإخراج كالتالي:
إذن… كل هذا يتعلق بـ CSP (أفترض ذلك) لأن الموقع مضبوط على ‘unsafe-inline’ للبيانات، وأنا أحاول جلب سكريبت خادم الإعلانات الخاص بي عبر عنوان URL يحتوي على متغيرات. أعرف… كم هذا بدائي من قبلي.
إذن… هل هناك أي شخص؟ هل يوجد حل بسيط لهذه المشكلة أم عليّ الاستسلام؟
الحل الصحيح هو عدم استخدام السطر المضمن وإعادة كتابته للربط بمداخل قوالب EmberJS الموجودة. إذا كنت تبحث عن حل مؤقت، فيمكنك تعطيل سياسة محتوى الأمان (CSP) في إعدادات الموقع أثناء العمل على إجراء التغييرات على حل الإعلانات المخصص الخاص بك. فقط كن على علم بأن ذلك قد يعرضك لهجمات حقن الكود الخبيث (XSS).
شكرًا لك يا فالكو. بدلًا من إيقاف جميع الحماية، هل توجد طريقة لإضافة سلاسل البيانات إلى القائمة البيضاء لمصدر URL الخاص بخادم الإعلانات فقط والسماح بتلك المتغيرات بالمرور؟ أو… مجرد إيقاف شرط “‘unsafe-inline’ data”؟
للأسف، لم أجد هذا الخيار موضحًا في المقال الذي ربطته.
ومع ذلك، لا يزال الإعلان لا يظهر في القسم الرئيسي من الموقع، بل يظهر فقط في التذييل حيث تم تثبيته في السمة داخل </body>. لقد أدركت أن هناك غلاف <noscript> حول القسم الأوسط، بينما ذلك الموجود في التذييل يقع خارج إغلاق </noscript>، لذا ربما يكون هذا هو السبب؟
لقد تحققت في متصفح فايرفوكس، والآن لا تظهر أي تحذيرات CSP في وحدة التحكم. لست متأكداً من سبب عدم رؤيتي لها في كروم من الأساس.
تُعدّ منصة Discourse تطبيق صفحة واحدة (SPA)، ويتم إنشاء ترميز جميع الصفحات على جانب العميل عبر تطبيق EmberJS الخاص بنا.
إن استخدام التلاعب المباشر بـ DOM مثل document.write يتعارض بشكل مباشر مع الفكرة الأساسية للمنصة، كما أن فرص عمله بشكل صحيح دون تعديلات ضئيلة جدًا.
أنصحك بمحاولة تكييف نظام الإعلانات لديك لاستخدام نظام الإعلانات الداخلية في إضافة الإعلانات الرسمية. ربما يمكنك تخصيص إعلان واحد فقط في مخزون الإعلانات الداخلية، واستخدام خطاف تغيير الصفحة للاتصال بخادم الإعلانات واستبدال الإعلان بالاستجابة؟ أو ربما يمكن لنظام الإعلانات لديك الكتابة مباشرة إلى مخزون الإعلانات الداخلية عبر واجهة برمجة التطبيقات (API)؟
شكرًا على المساعدة، فالكو. الأمر مخيف بعض الشيء، لكن كود نظام إعلانات هذا تم كتابته قبل إنشاء مصطلح واجهة برمجة التطبيقات (API)، لذا… نعم، سيكون من الأفضل لي كتابة نظام إعلانات جديد بالكامل من الصفر. لكنني لا أملك الوقت الكافي لذلك حاليًا، إذ أقوم بنشر منتدى جديد و6 مواقع محتوى إضافية أيضًا.
سأجرب بعض الخيارات البديلة لاستخدام document.write لأرى ما إذا كان ذلك ممكنًا.