홈페이지 로고를 클릭할 때 오류 발생

안녕하세요.
이미지로 보여드리겠습니다.
마지막 업데이트 전에 이 오류가 발생했습니다.
업데이트를 설치한 후에도 계속 이 오류가 나고 있습니다.

(Güncel - Current)
Ekran görüntüsü 2024-05-03 153512

사이트에서 모든 코드를 제거하고 다시 시도해 보았지만, 여전히 오류가 발생합니다.

번역

오류
문제가 발생했습니다.

안전 모드에서도 이런 문제가 발생하나요? 클릭할 때 브라우저 콘솔에 오류가 있는지 확인해 주시고, /logs를 살펴봐서 더 자세한 정보가 있는지 확인해 주세요.

안전 모드(Safe Mode)가 활성화되어 있고, 로그 페이지에서 오류가 보이지 않습니다. 제가 뭔가 잘못 이해하고 있는 건지 모르겠습니다.

마지막 로그입니다.
Ekran görüntüsü 2024-05-03 154929

안전 모드를 끄려고 시도해 보았습니다. 여전히 같은 오류가 발생합니다.

참고로, 해당 오류를 두 번째로 클릭하면 오류가 사라지고 홈 페이지가 나타납니다.

테마 구성 요소가 로드되고 플러그인이 해제될 때 일부 오류를 확인할 수 있습니다.

최근 사용자 지정 사항을 확인해 보시는 것이 좋습니다.

관심 가져주셔서 감사합니다.

마지막 플러그인: GIF

모든 플러그인

리모트 컴포넌트 외에 다른 JS 커스터마이징이 있나요?

모든 컴포넌트를 비활성화한 후, 오류가 발생하기까지 하나씩 활성화해 보시는 것을 추천합니다.

<script>
function moveTagsToTitle() {
    const mainLinks = document.querySelectorAll('.main-link');
    mainLinks.forEach(mainLink => {
        const discourseTags = mainLink.querySelector('.discourse-tags');
        const titleElement = mainLink.querySelector('.title');

        if (discourseTags && titleElement) {
            const tags = discourseTags.querySelectorAll('.discourse-tag');

            tags.forEach(tag => {
                const tagSpan = document.createElement('span');
                tagSpan.className = 'discourse-tag box';
                tagSpan.textContent = tag.textContent;
                tagSpan.style.fontSize = 'var(--font-down-2)';
                tagSpan.style.borderRadius = '10px';
                tagSpan.style.border = '1px solid #444460';
                tagSpan.style.backgroundColor = '#1f1f33';
                tagSpan.style.margin = '2px';
                tagSpan.style.display = 'inline-block';
                tagSpan.style.overflow = 'hidden';
                tagSpan.style.whiteSpace = 'nowrap';
                tagSpan.style.textOverflow = 'ellipsis';
                tagSpan.style.verticalAlign = 'middle';
                tagSpan.style.marginRight = '5px';
                tagSpan.style.marginLeft = '-6px';
                titleElement.insertBefore(tagSpan, titleElement.firstChild);
            });

            if (discourseTags.parentNode) {
                discourseTags.parentNode.removeChild(discourseTags);
            }
        }
    });

    const topicHeaderExtras = document.querySelectorAll('.topic-header-extra');

    topicHeaderExtras.forEach(topicHeaderExtra => {
        const discourseTags = topicHeaderExtra.querySelector('.discourse-tags');
        const tags = discourseTags.querySelectorAll('.discourse-tag');

        tags.forEach(tag => {
            tag.className = 'discourse-tag box';

            tag.style.borderRadius = '10px';
            tag.style.border = '1px solid #444460';
            tag.style.backgroundColor = '#1f1f33';
            tag.style.margin = '1px';
            tag.style.padding = '2px 8px';
            tag.style.display = 'inline-block';
            tag.style.overflow = 'hidden';
            tag.style.whiteSpace = 'nowrap';
            tag.style.textOverflow = 'ellipsis';
            tag.style.verticalAlign = 'middle';
            tag.style.marginRight = '5px';
            tag.style.marginBottom = '5px';
        });
    });
}

window.addEventListener('load', moveTagsToTitle);
const observer = new MutationObserver(moveTagsToTitle);
const targetNode = document.body;
const observerOptions = {
    childList: true,
    subtree: true
};
observer.observe(targetNode, observerOptions);
</script>

이 코드들이 이 오류를 일으키고 있습니다.
어떻게 수정해야 하는지 모르겠습니다.
이 코드들이 꼭 필요합니다 :frowning:

Emberjs 컴포넌트를 포함하는 요소를 이동하고 있습니다(태그 목록 참조). 이는 컴포넌트 생명주(lifecycle)를 방해할 가능성이 높다고 생각합니다.

가장 좋은 방법은 API를 사용하는 것입니다.

귀하의 경우, 다음 중 하나를 사용할 수 있습니다:

  • 제가 지난 주제에서 보여준 대로 플러그인 아웃렛(plugin outlets)을 사용하는 것입니다. 다만 카테고리 페이지의 최신 주제에는 해당 아웃렛이 존재하지 않으므로, 이를 요청해야 합니다.

  • 템플릿을 재정의하는 것입니다. 호환성 측면에서 좋은 해결책은 아니지만, 즉각적인 대안이 될 수 있습니다.

이 코드들을 찾았어요.

원하던 결과는 아니지만, 당분간은 이걸로 충분할 것 같아요.

 var pElement = document.getElementById('site-logo').parentNode;
                    //var pElement = document.createElement('a');
                    //pElement.innerHTML = aElement.innerHTML;
                    //aElement.replaceWith(pElement);
                    pElement.href = '#';
                    pElement.style.cursor = 'pointer'; 
                    pElement.onclick = function() {
                      window.location.href = '/';
                    };
                    //document.getElementById('site-logo').parentNode.href = '/';

도와주실 수 있는 분이 있다면 기다리고 있어요. 감사합니다 :pray:

그 경로를 선택하지 않는 것을 강력히 권장합니다. 이는 문제의 근본 원인을 수정하는 대신 부작용에 반창고를 붙이는 것과 같습니다. 이렇게 하면 더 많은 문제를 초래하게 됩니다(위 코드 때문에 최근 발생한 topic과 같은 문제).

JS 코드를 조금 더 Discourse에 맞게 조정할 수 있습니다(가능하다면 플러그인 아웃렛을 사용하는 것이 여전히 최선의 방법입니다).
아래는 예시입니다. 페이지 변경 시 API를 사용하고, 특정 경로에서 코드를 실행하며, 링크 앞의 HTML을 복사합니다(이렇게 하면 태그를 클릭할 수 있음):

JS
<script type="text/discourse-plugin" version="0.8">
  const { next } = require("@ember/runloop");
  
  function moveTags() {
    const mainLinks = document.querySelectorAll(".main-link:not(.tags-moved)");
    
    mainLinks.forEach((mainLink) => {
      const discourseTags = mainLink.querySelector(".discourse-tags");
      const titleElement = mainLink.querySelector("a[data-topic-id]");

      if (discourseTags && titleElement) {
        titleElement.insertAdjacentHTML("beforebegin", discourseTags.outerHTML);
        mainLink.classList.add('tags-moved');
      }
    });
  }

  api.registerModelTransformer("topic", async (topics) => {
    next(() => {
      moveTags();
    })
  });

  api.onPageChange((url) => {
    if (url.startsWith("/categories")) {
      moveTags();
    }
  });
</script>
CSS
.top-row, 
.link-top-line {
    .discourse-tag {
        font-size: var(--font-down-2) !important;
        padding: 2px 8px;
        margin: 2px 5px 2px -6px;
        border-radius: 10px;
        border: 1px solid #444460;
        background-color: #1f1f33;
    }
    
    .discourse-tag::after {
        content: '' !important;
        margin-left: 0 !important;
    }
}

.bottom-row, 
.link-bottom-line {
    .discourse-tags {
        display: none;
    }
}

Hi @Arkshine
로고 링크를 변경했지만 효과가 없었습니다. 해당 코드들을 삭제했습니다.

하지만 다른 방법이 없습니다. 태그를 이렇게 배치해야 합니다.
https://pvpfarm.com

누군가에게 비용을 지불하면 제대로 동작하는 적절한 코드를 작성해 줄 수 있을까요?

그리고 이 코드들(JS)은 어디서 찾나요? GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub 에서인가요?

유료 도움이 필요하시거나 원하시는 경우 Marketplace 채널에서 주제를 만들 수 있습니다. :+1:

#11에서 해당 코드를 제공했습니다.

다시 한번 @Arkshine 님,

해당 코드를 삭제한 후 주신 코드를 추가했는데 작동하지 않습니다. 제가 실수를 한 건가요?

제 환경에서는 정상적으로 작동합니다:

<script type="text/discourse-plugin" version="0.8"> 태그를 반드시 유지해야 합니다. 이 태그가 없으면 작동하지 않습니다.

네, 작동합니다!
작은 실수 하나가 있습니다.
로고를 클릭하면 태그 수가 증가합니다.

위에서 제 코드를 업데이트했습니다.

감사를 어떻게 표현해야 할지 모르겠어요. 정말로 감사드립니다! :pray: :heart:

@Arkshine 다시这个话题을 되살려 죄송합니다.
다시 한번 감사합니다. 주신 코드에서 오류를 찾았습니다.
도와주실 수 있을까요?
코드를 수정해 보았지만 해결하지 못했습니다.

Latest 섹션에서는 최근에 열린 태그가 있는 주제에 태그만 표시됩니다.


카테고리에 진입하면 태그가 표시되지 않습니다.

@ogulcan1787 위 코드를 업데이트했습니다.