فشل في التنفيذ 'postMessage' على 'DOMWindow'

لقد بحثت في المنتدى عن إجابة لهذا الأمر وجربت بعض الخيارات المنشورة المختلفة.

أقوم بتشغيل منشور Ghost على Digital Ocean Droplet، ومنتدى Discourse على Digital Ocean Droplet منفصل، حيث كان إجماع المنتدى هو أنه لا ينبغي تثبيت تطبيقين على نفس الخادم.

forum.mysite dot com
mysite dot com

أود أن تظهر تعليقات Discourse على كل منشور، وليس لديّ بادئة عنوان URL mysite.com/blog. لذلك اتبعت التوثيق للحصول على عنوان URL للموقع الحالي واستخدامه كعنوان URL للتضمين.

باتباع التوثيق هنا: Official Integration Documentation

أنا قادر على جعل الإطار يظهر على أي منشورات جديدة. ومع ذلك، فإنه لا يتم تحميله ويعرض الخطأ التالي:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('<URL>') does not match the recipient window's origin ('<URL>').

لقد أكدت أن إعدادات HTTPS الخاصة بي صحيحة. عنوان URL المضمن الخاص بي يحاكي البرنامج التعليمي، لكنني جربت بعض الاختلافات المختلفة لـ discourseEmbedUrl: في محاولة لاستكشاف الأخطاء وإصلاحها. كل الإشارات إلى عنوان URL للمقالة الحالية تسبب نفس الخطأ.

لقد حاولت أيضًا إضافة وظيفة انتظار، معتقدًا ربما لم يتم تحميل الإطار، لكن نفس الخطأ لا يزال قائمًا.

هذا هو رمز التضمين الحالي الخاص بي:

<div id='discourse-comments'></div>
<meta name='discourse-username' content='JosephPaul'>

<script type="text/javascript">
  DiscourseEmbed = {
    discourseUrl: 'https://forum.mysite.com/',
    discourseEmbedUrl: '{{url absolute="true"}}',
    // className: 'CLASS_NAME',
  };

  (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>

سأكون ممتنًا لأي مساعدة هنا، حيث أنني استنفدت جميع الحلول المنشورة. أعتقد أن الأمر قد يتعلق بكون المنتدى والمقالات الخاصة بي موجودة على أجهزة منفصلة.

إعجاب واحد (1)

مرحباً @Joseph3 :wave: مرحباً بك في Discourse Meta :slight_smile:
هل رأيت هذا الموضوع بعد؟

إعجابَين (2)

مرحباً ليلي، نعم لقد اتبعت هذا البرنامج التعليمي أيضًا للتحقق مرة أخرى من أن تثبيت discourse المستضاف بواسطة ghost هو نفسه.

لقد حاولت استخدام مرجع عنوان URL الخاص بهم كما هو موضح أدناه:

discourseEmbedUrl: 'https://mysite.com<%= current_page.url %>

هل هناك خطأ في ذلك؟

وكذلك، لكنه أدى إلى نفس الخطأ. شكراً لردك السريع.

إعجاب واحد (1)

هذا خطأ شائع جدًا: Search results for 'Failed to execute 'postMessage' on 'DOMWindow'' - Discourse Meta. من باب الاحتمال البعيد، أحد الأسباب المحتملة للخطأ هو عدم ملء إعداد “اسم المستخدم لإنشاء الموضوع” الموجود في صفحة إعدادات تضمين Discourse.

لا ينبغي أن يسبب ذلك مشكلة.

شيء يمكن أن يسبب مشاكل هو إذا كان موقع Discourse الخاص بك خاصًا: Embed Discourse comments on another website via Javascript.

إعجابَين (2)

مرحباً سيمون، في الأصل كانت لدي مشكلة في عدم صحة اسم المستخدم لإنشاء الموضوع ضمن لوحة تحكم Discourse. لكنني قمت بتصحيحه ليظهر JosephPaul في اللوحة وكذلك ضمن:
\u003cmeta name='discourse-username' content='JosephPaul'\u003e

لذلك، هذه صحيحة حسب علمي.

لقد نظرت أيضًا في الرابط الثاني الذي أرسلته، وأعتقد أن كل شيء صحيح. لقد حاولت للتو تبديل موقع Discourse الخاص بي لعدم طلب تسجيل الدخول وهذا لم يحل المشكلة.

تستمر المشكلة حتى مع المشاركات التي تم إنشاؤها حديثًا.

تعديل:
لقد حاولت مرة أخرى اتباع بعض تغييرات عنوان URL المضمن المقترحة في المنشور أعلاه. الكود التالي يعيد إنتاج الخطأ:

\u003cscript type="text/javascript"\u003e

setTimeout(5000)
  DiscourseEmbed = {
    discourseUrl: 'https://forum.josephpaul.com/',
    discourseEmbedUrl: 'https://josephpaul.com{{page.url}}' };

  (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);
  })();
\u003c/script\u003e

محاولة استكشاف إضافية بعد خيط سيمون:
لقد قمت بتعيين عنوان URL المضمن ليشمل أيضًا www. كما اقترح أحد المستخدمين. يحدث الخطأ التالي الآن:

Referer:`https://josephpaul.com/test-post/`
The referer was either not sent, or did not match any of the following hosts:
josephpaul.com
إعجاب واحد (1)

أي أفكار حول هذا يا سيمون؟ يسعدني تقديم أي مخرجات أو أمثلة برمجية تحتاجها.

أرسل لي رسالة خاصة مع رابط لمنشور مدونة لديك رمز التضمين الخاص به وسألقي نظرة.

لتضييق نطاق سبب المشكلة، سيكون من الرائع إذا كان بإمكانك محاولة إضافة رمز التضمين الموجود في صفحة تضمين Discourse الخاصة بك دون أي تعديلات، بخلاف استبدال EMBED_URL برابط صفحة المدونة.

إعجابَين (2)

مرحباً سيمون، بالتأكيد سأرسل لك مقتطفاً ورابطاً للموقع المباشر بكل سرور. كيف يمكنني إرسال رسالة خاصة (DM) على ديسكورس؟ ربما مستوى الثقة لدي غير كافٍ.

ذكرت الوثائق أن أنقر على اسمك وستظهر نافذة منبثقة مع رسالة، لكنني لا أرى ذلك من جهتي.

شكراً مرة أخرى على المساعدة حتى الآن! سأتأكد من تحديث سؤالي بأي حل يتم التوصل إليه.

تم العثور على الحل - شكرًا لـ @simon و @Lilly على تجربة دعم لا تصدق.

العناصر التي تم تغييرها بناءً على نصيحة Simon:

تم تغيير الكود من البرنامج التعليمي لعدم تضمين المصطلحات المهملة وتضمين عبارة if:


<div id='discourse-comments'></div>
<meta name="discourse-username" content="ForumAdminName">

<script type="text/javascript">
  if (window.location.pathname.indexOf('/p/') < 0) {
  DiscourseEmbed = {
    discourseUrl: 'https://forum.test.com/',
    discourseEmbedUrl: '{{url absolute="true"}}',
    // className: 'CLASS_NAME',
  };

  (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>

بالإضافة إلى ذلك، تمت إضافة https://www.test.com و https://test.com
إلى إعداد src لسياسة أمان محتوى موقع Discourse الموجودة في قسم المسؤول في Discourse > علامة التبويب الإعدادات.

ملاحظة - حسب تجربتي، قد لا ترى النتائج لمدة 30 ثانية تقريبًا عند تحديث الصفحة بسرعة كبيرة أثناء استخدام خادم صغير، لذا امنح كل إعادة تشغيل شبحية وكل تعديل في لوحة تحكم المسؤول في Discourse بضع دقائق لتأثيرها.

ملاحظة إضافية - هناك تأخير طويل عند التحقق من قسم التعليقات لأي مقال لأول مرة، ويوصي @simon دائمًا بالتحقق من المقال بنفسك أولاً، حتى يكون لدى Discourse وقت لإنشاء أقسام التعليقات المرتبطة بمنشور المنتدى.

شكرًا مرة أخرى للجميع، لقد كان ذلك مفيدًا للغاية. العديد من معلقي YouTube على البرنامج التعليمي الذي شاهدته واجهوا نفس المشكلات التي واجهتها، والتي أشارت إلى تعليمات التكامل بين Discourse و Ghost. قد تكون روابط YouTube مهملة، لذا كان هذا المساعدة رائعًا.

4 إعجابات

يسعدني أنك نجحت في تشغيله الآن. :+1: التضمين صعب بعض الشيء لأنه ليس متطابقًا تمامًا مع كل إعداد. شكرًا لك على مشاركة تجربتك، لقد تعلمت منها. أيضًا، @simon مذهل وهو أحد ألطف وأذكى وأكثر الأشخاص فائدة الذين حظيت بمتعة معرفتهم. وهو أيضًا جيد جدًا في Discourse. :slight_smile:

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.