# 커스텀 메뉴 링크가 Discourse에 의해 수정되고 깨집니다

**URL:** https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027
**Category:** Bug
**Created:** [3월 12, 2024, 2:47오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027 "2024-03-12T14:47:07Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![ljpp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ljpp/32/96506_2.png) [@ljpp](https://meta.discourse.org/u/ljpp)
#### Post date: [3월 12, 2024, 2:47오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/1 "2024-03-12T14:47:08Z")

</div>

버거 메뉴에 링크를 추가해야 합니다:

`
https://example.com?truendo_open=cookie_settings
`

하지만 Discourse 시스템이 링크를 수정하여 기능이 깨집니다:

`
https://example.com/latest?truendo_open=cookie_settings
`

해당 링크는 [Truendo](https://www.truendo.com/) CMP에서 제공하는 개인정보 설정 패널을 열어야 하며, 이는 EU 및 기타 일부 지역에서 **법적 요구사항** 입니다. 브라우저의 URL 필드에 해당 링크를 수동으로 붙여넣으면 설정 패널이 정상적으로 열립니다.

Truendo는 현재 Tappara.co에서 사용 중이지만, 사이트를 지원하는 Google AdSense의 약관 및 GDPR 법규를 준수하기 위해 해당 링크를 구현해야 합니다.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [3월 14, 2024, 4:51오전 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/6 "2024-03-14T04:51:42Z")

</div>

재현 방법을 확보했으며, 약 4주 내에 해결하도록 하겠습니다.

---

<div class="post-metadata">

### Author: ![Firepup650](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firepup650/32/465200_2.png) [@Firepup650](https://meta.discourse.org/u/Firepup650)
#### Post date: [3월 14, 2024, 1:05오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/7 "2024-03-14T13:05:12Z")

</div>

:facepalm: 이 문제를 꽤 오랫동안 목격해 왔는데, 사이드바 링크 중 하나가 작동하지 않을 때까지는 별생각이 없었습니다.

---

<div class="post-metadata">

### Author: ![ljpp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ljpp/32/96506_2.png) [@ljpp](https://meta.discourse.org/u/ljpp)
#### Post date: [3월 14, 2024, 2:37오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/8 "2024-03-14T14:37:10Z")

</div>

네, URL을 파싱하는 건 좋은 아이디어처럼 들릴 수 있지만, 이런 문제를 일으킬 수 있고 실제로는 큰 가치를 제공하지 않는 경우가 많습니다.

Truendo CMP에 대해서는, 무료 버전이 Google AdSense와 호환되지 않아 비활성화해야 했습니다. AdSense는 TCF를 요구하는데, 이는 무료 플랜에 포함되지 않습니다. 광고를 사용하지 않지만 분석 등에 CMP가 필요한 사용자들에게는 제법 괜찮은 제3자 솔루션으로 느껴집니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [3월 15, 2024, 3:20오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/14 "2024-03-15T15:20:57Z")

</div>

@ljpp 지금 이 문제를 확인 중인데, 그 사이에 한 가지만 더 확인하고 싶었습니다. 포럼 게시글에 `https://example.com/latest?truendo_open=cookie_settings` 링크를 넣고 클릭하면, Truendo가 이를 올바르게 감지하고 설정 화면을 여나요?

Discourse 내 네비게이션은 전체 페이지 리로드가 아니므로, Truendo가 PWA 내부의 '소프트 네비게이션’을 감지하지 않을 것 같습니다. 그래서 답이 '아니오’일 것으로 예상되지만, 제 추측이 틀렸으면 좋겠습니다! 🤔

동작하지 않는다면, 마법 링크에 의존하는 대신 Truendo의 JavaScript API를 사용해 설정 화면을 팝업으로 여는 방법을 사용해야 할 것 같습니다.

---

<div class="post-metadata">

### Author: ![ljpp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ljpp/32/96506_2.png) [@ljpp](https://meta.discourse.org/u/ljpp)
#### Post date: [3월 15, 2024, 3:25오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/15 "2024-03-15T15:25:02Z")

</div>

> [@david](#):
>
> 답은 아니라고 생각합니다.

맞습니다. 게시물의 나머지 부분도 정확합니다.

이는 Truendo뿐 아니라 AdSense의 자체 솔루션을 포함하여 CMP 전반에 걸쳐 적용되는 것 같습니다.

같은 문제를 더 자세히 보고하기 위해 광고 플러그인 피드백 그룹에 가입을 신청했습니다.

> [@광고 관련해서 Discourse 제품팀과 대화하기](https://meta.discourse.org/t/speak-with-the-discourse-product-team-about-advertising/299050/10?u=ljpp):
>
> 저도 참여합니다! 2016년부터 경험을 쌓아왔고, 우리의 운영은 AdSense 수익에 전적으로 의존하고 있습니다. 현재 동의 관리(Consent Management)는 큰 골칫거리인데, 비즈니스 등급의 3rd party CMP에 수백 달러를 지불하지 않는 한 좋은 해결책이 없습니다. 제 이해로는, 플러그인에 일부 개발을 추가하면 이 문제를 해결할 수 있을 것 같습니다. UI(버거 메뉴)에서 동의 재요청/철회 기능을 제공합니다. AdSense가 푸시하는 플로팅 CMP 요소를 숨깁니다. [Add a consent revocation link to your site - Google AdSense Help](https://support.google.com/adsense/answer/10959060?hl=en)

---

<div class="post-metadata">

### Author: ![ljpp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ljpp/32/96506_2.png) [@ljpp](https://meta.discourse.org/u/ljpp)
#### Post date: [3월 15, 2024, 3:54오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/16 "2024-03-15T15:54:50Z")

</div>

Google의 문서.

> **[Add a consent revocation link to your site - Google AdSense Help](https://support.google.com/adsense/answer/10959060?hl=en)**
>
> Consent revocability is a requirement of the Privacy & messaging user consent program. AdSense will automatically add the required European regulations message revocation link to sites on which yo

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [3월 20, 2024, 3:31오후 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/18 "2024-03-20T15:31:53Z")

</div>

이 커밋을 통해 사이드바 링크에 임의의 쿼리 파라미터를 포함할 수 있게 됩니다:

> <https://github.com/discourse/discourse/commit/e3cfb1967d531a09b475bba45b33605eabd5a0d8>
>
> All our link validation, and conversion from url -\> route/model/query is expensi…ve and prone to bugs. Instead, if people enter a link, we can just use it as-is.
> 
> Originally all this extra logic was added to handle unusual situations like \`/safe-mode\`, \`/my/...\`, etc. However, all of these are now handled correctly by our Ember router, so there is no need for it.
> 
> Now, we just pass the user-supplied \`href\` directly to the SectionLink component, and let Ember handle routing to it when clicked.
> 
> The only functional change here is that we no longer validate internal links by parsing them with the Ember router. But I'd argue this is fine, because the previous logic would cause both false positives (e.g. \`/t/123\` would be valid, even if topic 123 doesn't exist), and false negatives (for routes which are server-side only, like the new AI share pages).

사이드바와 직접적인 관련은 없으나, 여전히 몇 가지 특이한 문제가 남아 있습니다:

1. 위에서 논의했듯이, 쿼리 파라미터가 서드파티 JS 라이브러리에서 무언가를 트리거하도록 의도된 경우, 해당 라이브러리는 단일 페이지 애플리케이션(SPA)에 대한 지원이 필요합니다.

2. Ember(저희가 사용하는 JS 프레임워크)는 현재 네비게이션 직후에 인식되지 않는 쿼리 파라미터를 제거합니다. 따라서 사이드바 링크에 쿼리 파라미터가 포함되어 있더라도 네비게이션이 시작되는 즉시 사라질 수 있습니다.

그동안 이 두 가지 문제에 대한 하나의 우회 방법은 링크를 외부 사이트로 설정한 후, 해당 사이트에서 다시 포럼으로 리다이렉트하는 것입니다. (예: URL 단축 서비스)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [3월 23, 2024, 8:00오전 UTC](https://meta.discourse.org/t/custom-menu-links-are-modified-and-broken-by-discourse/299027/20 "2024-03-23T08:00:19Z")

</div>

이 주제는 2일 후 자동으로 닫혔습니다. 더 이상 새 답변을 남길 수 없습니다.
