خطأ في التضمين للمشاركات الموجودة

مرحبًا! نواجه خطأً في التضمين (Embedding)، حيث يظهر في إطار التضمين (iframe) ما يلي:

خطأ في التضمين
المرجع (Referer):
إما أن المرجع لم يُرسل، أو أنه لا يتطابق مع أيًا من المضيفين التاليين:

على الرغم من أن النطاقات متطابقة، وتوضح وحدة التحكم (console) ما يلي:

Uncaught SyntaxError: فشل في تنفيذ 'postMessage' على 'Window': أصل الهدف غير صالح '' في استدعاء 'postMessage'.
    _embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:6 Uncaught DOMException: فشل في تنفيذ 'postMessage' على 'Window': أصل الهدف غير صالح '' في استدعاء 'postMessage'.
        at e (https://sjc1.discourse-cdn.com/business5/brotli_asset/embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:1:42)
        at window.onload (https://sjc1.discourse-cdn.com/business5/brotli_asset/embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:1:470)

نحن نستخدم “الإعداد البديل” (Alternate configuration)، لذا فإن الموضوع المحلول لا يفيدنا حقًا.

(الإعداد البديل) ربط المواضيع الموجودة

يفضل بعض الأشخاص ألا يقوم Discourse بإنشاء مواضيع تلقائيًا على منتدياتهم. بدلاً من ذلك، يريدون إنشاء المواضيع بأنفسهم، ثم إخبار كود التضمين بالموضوع الذي يريدون ربطه. يمكنك فعل ذلك عن طريق تعديل بسيط في كود التضمين:

<div id='discourse-comments'></div>

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'http://discourse.example.com/',
                     topicId: 12345 };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

الفرق الوحيد هنا هو أننا استبدلنا discourseEmbedUrl بمعرف موضوع من Discourse. إذا قمت بذلك، لن يتم إنشاء أي موضوع، وسيتم عرض التعليقات من ذلك الموضوع تلقائيًا.

من Embed Discourse comments on another website via Javascript

هل توجد طريقة سهلة لتصحيح هذا الخطأ؟ من أين يُستخرج المرجع (referrer) ولماذا قد يكون فارغًا؟
هل هذه مشكلة معروفة/شائعة، وهل توجد طريقة لإخفاء إطار التضمين (iframe) أو محتوياته عند حدوث خطأ؟

عند النقر على السكربت حيث يحدث الخطأ، يبدو أنه لا يستطيع العثور على مرجع لـ postMessage داخل العنصر #data-embedded.}

يمكنك فحص الـ iframe المدمج في صفحتك باستخدام أداة المحقق (Inspector) والتحقق مما إذا كان يحتوي على وسم meta يحتوي على الـ referer الصحيح. يجب أن يبدو الأمر شبيهًا بهذا: <meta id='data-embedded' data-referer="YOUR_SITE">

يجب أن يتم ملء YOUR_SITE تلقائيًا بواسطة الـ iframe.

<meta id="data-embedded" data-referer="">

إنه فارغ :scream: ماذا يعني هذا؟

يعني ذلك لسبب ما أن إطار الويب المضمن (iframe) الذي تقوم بتضمينه لا يتم تزويده بمرجع. لست متأكدًا مما إذا كان هناك شيء يقوم بإزالته، مثل وكيل أو إعادة توجيه، أو ما إذا كانت المشكلة متعلقة بالمتصفح.

https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963/353?u=falco