Ctrl+F 검색 오류, 대체 방법 알려주세요

안녕하세요,

다음 디스코urse 포럼에 있었습니다.

여기서 “mac”라는 단어를 찾아야 했는데요.

Ctrl+F를 사용했지만, 화면에 보이는 문자열만 찾을 수 있었습니다. 스크롤을 하면 매칭 항목이 사라졌습니다.

또한 스크롤바의 스크롤 위치 매칭 표시기에도 혼란을 초래합니다.

이것이 “메모리 절약”을 위한 것이라는 주장은 이해합니다. 하지만 이 시스템은 64기가바이트의 메모리를 갖추고 있으며, 이 페이지의 텍스트는 100킬로바이트도 안 됩니다. 따라서 이것은 사실상 페이스북이 스크래핑을 방지하기 위해(하지만 실패하며) 사용하는 것과 같은 반 스크래핑 기능이라고 생각합니다.

이 이상한 버그를 검색해 보니, 이 매우 방해를 유발하는 반 기능에 대한 불만이 넘쳐나는 것을 발견했습니다.

대안은 무엇인가요?

클라이언트 측에서 비활성화할 수 있나요?

인쇄 모드로 페이지를 불러오는 것은 어떨까요?

전체 페이지의 텍스트만 덤프로 강제 생성하여 텍스트 에디터로 볼 수 있는 방법이 있나요?

그리몽키(Greasemonkey) 스크립트는 어떨까요? 메모리에서 텍스트를 언로드하여 검색할 수 없게 만드는 기능을 무력화할 수 있는 어떤 것이 있을까요?

제 유일한 선택지가 데이터베이스 서버에 침입하여 모든 디스커스 내용을 유출한 후, 이러한 방해를 없이 댓글 스레드를 표시하는 코드를 작성하는 것인가요?

2014년부터 이에 대한 불만을 보고 있으니, 이 문제를 해결할 의사가 없으며 “버그가 아닌 기능”이지만, 사용자를 위한 것이 아니라 소유자를 위한 기능인 것 같습니다.

이것이 저를 “디스커스” 포럼을 돌아다니는 불운을 겪을 때마다 경계하게 만드는 매우 심각한 문제의 “메타”는 무엇인가요?

네, 저는 비관적입니다. 어떻게 알 수 있나요?

슬롭 머신에게 인쇄용 버전을 달라고 요청했습니다

약 1분간 미리보기가 처리된 후, 실제로 작동합니다

/print를 추가하면 한 번에 최대 100개의 게시물을 불러올 수 있습니다. 여기에서 직접 확인해 보세요: https://forum.openwrt.org/t/re-luci-add-support-for-managing-tags-in-dhcp-and-dns-configuration-web-page/220640/print

네, https://forum.openwrt.org/raw/220640을 참고하세요.

감사합니다!

raw 메서드로 해결되었습니다.

혹시 모든 페이지를 자동으로 raw로 로드하는 애드온이 있을까요?

다른 메시지를 작성하고 있었는데, 죄송합니다. 하루 종일 시간 초과를 기다리며 한 장씩 이미지를 올릴 수는 없거든요.

네, 시도해 보았지만

서버 측 검색을 사용하길 원하지 않습니다.

또한 결과가 제게 유용하게 사용할 수 있는 형태가 아닙니다.

아래는 그 모습입니다.

죄송합니다.

저는 OpenWRT에서 발생한 문제를 해결하려고 하고 있었습니다.

브라우저가 당연히 해야 할 것처럼 검색을 할 수 없어서 정말 답답했습니다.

여기에 시간을 할애하지 않는다고 해서 제가 무례하게 느껴지셨다면 죄송합니다. 하지만 제 입장에서 이해해 주십시오.

저는 소프트웨어를 사용하는 데 큰 어려움을 겪고 있으며, 그 정도가 심해서 문제를 해결하기 위한 대안을 찾아보게 되었습니다.

그런데 해결책을 찾지 못하자, 소프트웨어 이름을 찾아서 토론 공간을 찾고, 계정을 만들고, 캡차를 풀고, 이메일 인증을 하고, 포럼에서 비슷한 질문을 검색하고, 몇 가지를 찾았는데 모두 닫혀 있었고, 다른 것들을 찾아서 새 게시글을 작성하기로 결정하고, 쓰기 시작해서, 수많은 이미지 예시를 포함해 내 의견을 전부 적었습니다.

그런 다음 답변을 누르니, 한 번에 한 장의 이미지만 게시할 수 있다는 오류 메시지가 떴습니다.

그것은 내 메시지의 일관성이 그 스크린샷에 의존하고 있기 때문에, 내 메시지를 통째로 수정해야 한다는 뜻이었습니다.

그래서 메시지 한 개당 이미지 한 장씩으로 나누어 보려 했지만, 메시지 사이에 기다려야 하는 알려지지 않은 대기 시간이 있었고, 저는 그냥 다시 일하러 돌아가고 싶었습니다. 이 개발자들은 분명히 이런 어려움을 알고 있을 테니, 제가 이 문제를 얼마나 힘들어하는지 말한다고 해서 새로운 정보를 주는 게 아니라고 생각하기 시작했습니다.

하지만 그렇지 않네요. 파워 유저로서, 저는 다른 사용자들의 어려움을 개발자들에게 알려야 할 의무가 있고, 이제 그 어려움을 알려내는 데 무려 30분 가까이 고생하고 있습니다.

그러니… 이게 무례하게 느껴진다면 죄송합니다. 하지만 제 메시지를 게시하는 데 필요한 행동을 알아내고 실행하기 위해 또 몇 분을 더 잃고 싶지 않습니다.

다만, 당신에게 무례한 의도는 전혀 없으며, 그저 정말로 답답할 뿐이라고 약속드립니다!

여러분, 저도 Discourse에서 CTRL+F를 사용할 때 동일한 짜증나는 문제를 겪었습니다. 화면에 현재 표시되지 않는 게시글은 지연 로딩/메모리 해제 시스템 때문에 검색 결과에서 사라집니다. 64GB의 RAM을 사용하더라도 브라우저 내에서 전체 토론을 검색할 수 없습니다. 제 생각에는 이것은 메모리 절약 기능보다는 스크래핑 방지 기능에 가깝습니다. 제가 찾은 작동하는(그리고 더 안전한) 대안은 다음과 같습니다:

  1. 인쇄 보기 사용: 토론 URL 끝에 /print를 추가하세요. 예: https://forum.example.com/t/topic-name/12345/print. 이렇게 하면 토론의 모든 게시글이 한 번에 로드되며 브라우저 검색(CTRL+F)이 작동합니다. 레이아웃은 단순해지지만 전체 텍스트 검색에는 완벽합니다.

  2. 모든 것이 로드될 때까지 스크롤: 지연 로딩 시스템이 DOM에 모든 게시글을 렌더링할 때까지 계속 스크롤하세요. 그러면 CTRL+F로 모든 것을 찾을 수 있습니다. 긴 스레드에서는 번거로울 수 있지만 추가 도구 없이 작동합니다.

  3. Discourse API 사용: 모든 토론에는 https://forum.example.com/t/{topic_id}.json과 같은 JSON 엔드포인트가 있습니다. post_stream.posts 배열에서 모든 게시글을 추출하여 텍스트 편집기에 열고 편안하게 검색할 수 있습니다. 안전하고 공식적인 방법이며 지연 로딩과 무관하게 작동합니다.

  4. Userscript / Greasemonkey 방식: Chrome/Firefox용 이 간단한 userscript를 사용하여 전체 페이지 게시글 로드를 자동화할 수 있습니다. 토론이 완전히 렌더링될 때까지 "더 많은 게시글 로드"를 자동으로 클릭합니다:

// ==UserScript==
// @name         Discourse Load All Posts
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Auto-click "load more posts" to fully render topic for search
// @match        https://*/*
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    function loadAll() {
        const button = document.querySelector('.load-more[data-more-url]');
        if (button) {
            button.click();
            setTimeout(loadAll, 500); // wait and try again
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // start a second after page load
    });
})();

작동이 완료되면 CTRL+F로 스레드의 모든 것을 검색할 수 있습니다.

내보내기 / 외부 검색: 인쇄 보기 또는 API JSON을 사용하여 게시글을 PDF, HTML 또는 일반 텍스트로 내보내세요. VSCode 또는 Notepad++와 같은 편집기에서 열어 전체 텍스트 검색을 수행하세요.

:warning: 서버 해킹을 시도하지 마세요: 데이터베이스 침투나 서버 측 콘텐츠 스크래핑은 불법이며 불필요합니다. API / 인쇄 보기 / userscript를 사용하세요—모두 안전하고 안정적으로 작동합니다.

요약: 가장 쉬운 방법: /print 보기. 더 유연한 방법: API JSON 또는 userscript. 모든 게시글이 DOM에 로드되면 CTRL+F가 작동합니다. Discourse 팀이 이것을 보고 언젠가 “전체 검색” 옵션을 고려해 주었으면 좋겠습니다—연구나 심층적인 토론 읽기를 하는 사람들에게 심각한 UX 문제입니다 :sweat_smile:

그 Greasemonkey 스크립트가 동작하나요?

직접 만들었나요?

공유했던 userscript에 대해 좀 더 명확히 설명드리겠습니다. 이 스크립트는 제가 사용하던 포럼에 맞춰 특별히 작성되었기 때문에, 다른 사이트로 적용을 시도할 경우 HTML 구조에 일부 차이가 있을 수 있습니다. 이 스크립트는 “Load More Posts” (lazy-load) 시스템을 사용하는 표준 Discourse 토픽에서 동작하며, 모든 게시물이 DOM에 로드될 때까지 “더 많은 게시물 로드” 버튼을 자동으로 반복 클릭합니다. 모든 게시물이 로드되면, 브라우저의 CTRL+F 기능을 사용하여 평소와 같이 키워드를 검색할 수 있습니다.

사실, 많은 사람들이 수년 동안 Tampermonkey/Greasemonkey를 사용하여 Discourse를 이 방식으로 처리해 왔으며, 매우 큰 포럼에서도 잘 작동합니다.

:warning: 참고: 일부 포럼에서는 버튼의 클래스가 변경될 수 있습니다(예: `.load-more[data-more-url]`). 따라서 실제 버튼에 맞게 선택자를 약간 조정해야 할 수 있습니다.