# 'DOMWindow'에서 'postMessage' 실행 실패

**URL:** https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690
**Category:** Support
**Tags:** embedding
**Created:** [2월 26, 2024, 12:07오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690 "2024-02-26T00:07:41Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [2월 26, 2024, 12:07오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/1 "2024-02-26T00:07:41Z")

</div>

포럼에서 이 문제에 대한 답변을 검색해 보고, 게시된 몇 가지 옵션을 시도해 보았습니다.

Digital Ocean Droplet에서 Ghost 게시물을, 또 다른 Digital Ocean Droplet에서 Discourse 포럼을 실행하고 있습니다. 포럼의 합의에 따르면 두 개의 애플리케이션을 같은 서버에 설치하지 않는 것이 좋다고 하더군요.

forum.mysite dot com  
mysite dot com

모든 게시물에 Discourse 댓글이 표시되기를 원하며, [mysite.com/blog](http://mysite.com/blog) URL 슬래그는 가지고 있지 않습니다. 따라서 문서에 따라 현재 사이트 URL을 가져와 임베드 URL로 사용하도록 설정했습니다.

여기 있는 문서에 따라 진행했습니다: [공식 통합 문서](https://ghost.org/integrations/discourse/)

새로운 게시물에는 프레임이 표시되도록 설정할 수 있었습니다. 그러나 로딩되지 않으며 다음과 같은 오류가 발생합니다:  
`Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('<URL>') does not match the recipient window's origin ('<URL>').`

HTTPS 설정이 올바른지 확인했습니다. 임베드 URL은 튜토리얼과 유사하게 설정했으며, 문제를 해결하기 위해 discourseEmbedUrl의 몇 가지 다른 변형도 시도해 보았습니다. 현재 기사 URL에 대한 모든 참조는 동일한 오류를 일으키고 있습니다.

프레임이 로딩되지 않았을지도 모른다고 생각하여 대기 함수를 추가해 보기도 했지만, 동일한 오류가 계속됩니다.

현재 사용하고 있는 임베드 코드는 다음과 같습니다:

```plaintext
<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>

```

게시된 모든 해결책을 시도해 보았으므로 도움이 필요할 것 같습니다. 포럼과 기사가 서로 다른 머신에 있기 때문에 그와 관련이 있을 것 같습니다.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [2월 26, 2024, 12:20오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/2 "2024-02-26T00:20:52Z")

</div>

안녕하세요 @Joseph3 👋 Discourse Meta에 오신 것을 환영합니다 🙂

이 주제를 확인해 보셨나요?

> [@Embed Discourse comments on another website via Javascript](https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963):
>
> Discourse has the ability to embed the comments from a topic in a remote site using a Javascript API that creates an IFRAME. For an example of this in action, check out [Coding Horror’s blog](http://blog.codinghorror.com/welcome-to-the-internet-of-compromised-things/#discourse-comments). The blog is run via [Ghost](https://ghost.org/) but the comments are embedded from his [Discourse forum](http://discourse.codinghorror.com/t/welcome-to-the-internet-of-compromised-things/3550). One important thing to note with this setup is that users have to navigate to your forum to post replies. This is intentional, as we feel that the posting interface on a Discourse forum is currently much richer than what we …

---

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [2월 26, 2024, 12:32오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/3 "2024-02-26T00:32:17Z")

</div>

릴리, 안녕하세요. 네, 그 튜토리얼도 따라 해 보며 고스트 호스팅된 디스커스 설치 환경이 동일한지 확인해 보았습니다.

아래와 같이 URL 참조를 사용해 보았는데요.

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

여기서 잘못된 부분이 있을까요?

그래도 동일한 오류가 발생했습니다. 빠른 답변 감사합니다.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2월 26, 2024, 4:01오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/4 "2024-02-26T04:01:55Z")

</div>

> [@Joseph3](#):
>
> ‘DOMWindow’에서 ‘postMessage’ 실행 실패: 제공된 대상 origin(’')이 수신 창(origin: ‘’)의 origin과 일치하지 않습니다.

이것은 꽤 일반적인 오류입니다: [Search results for 'Failed to execute 'postMessage' on 'DOMWindow'' - Discourse Meta](https://meta.discourse.org/search?expanded=true&q=Failed%20to%20execute%20%27postMessage%27%20on%20%27DOMWindow%27). 가능성이 낮긴 하지만, 오류의 원인 중 하나는 Discourse 임베딩 설정 페이지에 있는 “토픽 생성 시 사용자 이름” 설정을 입력하지 않은 것일 수 있습니다.

> [@Joseph3](#):
>
> 내 포럼과 기사가 서로 다른 머신에 있는 것과 관련이 있을 것 같습니다.

그것은 문제가 되지 않아야 합니다.

문제를 일으킬 수 있는 것 중 하나는 Discourse 사이트가 비공개인 경우입니다: [Embed Discourse comments on another website via Javascript](https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#embedding-comments-from-a-private-site-9).

---

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [2월 26, 2024, 4:22오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/5 "2024-02-26T04:22:31Z")

</div>

Simon님, 처음에는 Discourse 관리 패널에서 주제 생성 시 사용자 이름이 올바르게 설정되어 있지 않은 문제가 있었습니다. 하지만 이제 패널 안에서도 `{{page.url}}` 부분처럼 `JosephPaul`이 올바르게 표시되도록 수정했습니다.

`<meta name='discourse-username' content='JosephPaul'>`

제 지식 범위 내에서 이 부분들은 모두 올바르게 설정되어 있습니다.

Simon님이 보내주신 두 번째 링크도 확인해 보았으며, 모든 것이 올바르게 설정되어 있다고 생각합니다. Discourse 사이트에서 로그인 요구를 끄도록 전환해 보았지만, 그 문제는 해결되지 않았습니다.

새로 생성된 게시물에서도 문제가 계속되고 있습니다.

수정:  
위 게시물에서 제안된 임베드 URL 변경 사항 중 일부를 다시 시도해 보았습니다. 다음 코드가 오류를 재현하고 있습니다:

```plaintext
<script type="text/javascript">

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

```

Simon님의 스레드를 따라 추가적인 문제 해결 시도:

다른 사용자의 제안에 따라 임베드 URL에 www.도 포함하도록 설정했습니다. 이제 다음 오류가 발생합니다:

```plaintext
Referer:`https://josephpaul.com/test-post/`

Referer가 전송되지 않았거나, 다음 호스트 중 어느 것과도 일치하지 않았습니다:

josephpaul.com

```

---

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [2월 27, 2024, 3:27오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/6 "2024-02-27T03:27:24Z")

</div>

시몬 씨, 혹시 이 문제에 대해 아이디어가 있으신가요? 필요하시면 출력 결과나 코드 예시를 얼마든지 제공해 드릴 수 있습니다.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2월 27, 2024, 7:46오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/7 "2024-02-27T07:46:33Z")

</div>

> [@Joseph3](#):
>
> 이 문제에 대해 아이디어가 있나요?

임베드 코드가 포함된 블로그 게시물 링크를 DM으로 보내주시면 확인해 드리겠습니다.

문제의 원인을 좁혀 보려면, Discourse 임베딩 페이지에 있는 임베드 코드를 수정 없이 그대로 사용해 보세요. 다만 `EMBED_URL` 부분은 블로그 페이지 URL로만 교체하면 됩니다.

---

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [2월 27, 2024, 7:40오후 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/9 "2024-02-27T19:40:51Z")

</div>

시몬, 안녕하세요. 물론이죠, 스니펫과 라이브 사이트 링크도 기꺼이 보내드릴게요. 디스코스에서 DM을 보내는 방법은 무엇인가요? 제 신뢰 수준이 아직 충분히 높지 않은 것 같습니다.

문서에는 이름을 클릭하면 메시지 팝업이 나타난다고 되어 있었는데, 제 화면에서는 그런 옵션이 보이지 않습니다.

지금까지 도와주셔서 다시 한번 감사드립니다. 해결책이 나오면 제 질문에 내용을 업데이트하겠습니다.

---

<div class="post-metadata">

### Author: ![Joseph3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joseph3/32/365522_2.png) [@Joseph3](https://meta.discourse.org/u/Joseph3)
#### Post date: [3월 1, 2024, 3:00오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/10 "2024-03-01T03:00:35Z")

</div>

해결 완료 - 놀라운 지원 경험을 제공해 주신 @simon님과 @Lilly님께 감사드립니다.

Simon님의 조언에 따라 수정된 항목:

튜토리얼의 코드를 수정하여 비추천(deprecated) 용어를 제외하고 if 문을 포함시켰습니다:

```plaintext
<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>

```

추가로, Discourse 관리 \> 설정 탭에서 찾을 수 있는 Discourse 사이트의 콘텐츠 보안 정책(CSP) src 설정에 [https://www.test.com](https://www.test.com) 및 [https://test.com을](https://test.xn--com-of0o) 추가했습니다.

참고 - 저의 경험상, 작은 드롭렛(droplet)을 사용하는 경우 페이지를 너무 빨리 새로고침하면 약 30초 동안 결과가 표시되지 않을 수 있으므로, 각 Ghost 재시작 및 Discourse 관리 패널 편집이 적용되도록 잠시 기다려 주십시오.

추가 참고 - 어떤 기사의 댓글 섹션을 처음 확인할 때 긴 지연(latency)이 발생합니다. @simon님은 Discourse가 포럼 게시글과 연관된 댓글 섹션을 생성할 시간을 줄 수 있도록 항상 먼저 기사를 직접 확인해 보라고 권장합니다.

다시 한번 모두 감사드립니다. 매우 도움이 되었습니다. 제가 시청한 튜토리얼의 YouTube 댓글 중에도 저와 같은 문제를 겪고 discourse/ghost 통합 지침을 언급한 분들이 많았습니다. 해당 YouTube 링크는 비추천 상태일 수 있으므로, 이번 도움은 매우 가치 있었습니다.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [3월 1, 2024, 4:50오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/11 "2024-03-01T04:50:25Z")

</div>

이제 제대로 작동하게 되어 정말 기쁩니다. 👍 임베딩은 설정마다 조금씩 다르기 때문에 다소 까다로울 수 있습니다. 경험을 공유해 주셔서 감사합니다. 덕분에 많은 것을 배웠습니다. 또한, @simon은 정말 놀라운 분으로, 제가 알게 된 사람들 중 가장 친절하고 똑똑하며 가장 도움이 되는 분 중 한 명입니다. 그리고 Discourse를 다루는 데에도 꽤 능숙합니다. 🙂

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [3월 31, 2024, 4:51오전 UTC](https://meta.discourse.org/t/failed-to-execute-postmessage-on-domwindow/296690/12 "2024-03-31T04:51:18Z")

</div>

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