일부 텍스트를 선택하면 "모든 외부 링크를 새 탭에서 열기"가 작동하지 않습니다

  1. /my/preferences/interface의 기타 인터페이스 옵션에서 모든 외부 링크를 새 탭에서 열기 옵션이 체크되어 있는지 확인하세요 (어쨌든 기본 설정인 것 같습니다)
  2. 외부 링크가 있는 게시물을 찾으세요 – meta와 try에 있는 무작위 예시를 참조하세요
  3. 해당 게시물에서 발견한 첫 번째 외부 링크를 클릭하세요 (가능하면 동일한 링크)

새 탭에서 열리면 좋습니다. :+1:

하지만:

  1. /my/preferences/interface의 기타 인터페이스 옵션에서 모든 외부 링크를 새 탭에서 열기 옵션이 체크되어 있는지 확인하세요 (어쨌든 기본 설정인 것 같습니다)
  2. 이전 테스트와 동일한 게시물을 엽니다
  3. 이 게시물에서 임의의 텍스트를 선택하세요 (1글자 이상, 1단어 이상, 어떤 선택이든 상관없음) – 플로팅 인용 버튼이 보일 것입니다
  4. 해당 게시물에서 발견한 첫 번째 외부 링크를 클릭하세요

:no_entry: :see_no_evil: :warning: 이제 외부 링크가 새 탭 대신 현재 탭에서 열립니다. :warning: :see_no_evil: :no_entry:


:information_source: 실제로는 여기 있는 이 게시물로 간단히 테스트해 볼 수 있습니다:

  1. 이 외부 링크를 클릭하세요 – 좋습니다 :+1: 새 탭
  2. 이 텍스트를 선택하세요
  3. 1단계의 외부 링크를 다시 클릭하세요 – NG :no_entry: 현재 탭
4개의 좋아요

확인할 수 있습니다. 사용자가 문제를 일으키려는 것으로 보이는 경계 사례(edge case)인 것 같아, 수정할 가치가 있는지 확신은 없습니다.

1개의 좋아요

수정하기가 까다로울 것 같아서?

저는 자주 클릭하고, 자주 텍스트를 선택합니다.
그래서 이 버그가 정말 자주 신경 쓰이죠.

이 버그에 대해 꽤 오래전에 언급은 했지만, 이번만큼 잘 설명하지는 않았습니다. :wink:

그건 정말 짜증나네요.

PR을 제출할 능력이 없다면(나도 그런 것 같네요), 컨트롤 키를 누른 채로 클릭하여 새 탭에서 여는 방식을 사용하면 됩니다. 자동화하기도 어렵지 않고, 새 탭에서 링크를 열지 않는 사이트에서도 문제를 해결해 줄 수 있습니다.

1개의 좋아요

Ctrl+클릭을 사용하겠습니다만, 모든 외부 링크를 새 탭에서 열기라는 좋은 옵션이 있습니다.

하지만 이 옵션이 실제로 하는 일은 임의의 외부 링크를 새 탭에서 열기입니다.

재현 방법을 찾아내는 데 몇 달, 아니 몇 년이 걸렸습니다.
저에게는 정말로 무작위적으로 느껴졌습니다.

일관된 동작을 위해 이 옵션을 제거하는 것은 어떨까요?

단순한 CSS 문제 PR을 위해 Discourse 개발 환경을 설정하려고 했던 기억이 납니다.
하지만 정확히 기억나지는 않는데, 제 PC가 너무 오래되어 모든 요구 사항을 설치하거나 실행할 수 없어서 포기한 것 같습니다.

1개의 좋아요

이전에 Discourse 개발 환경을 설치하려는 시도가 실패했던 글을 다시 찾았습니다.
제 개인용 Linux PC는 너무 오래되었고, 업무용 Windows 노트북에는 하이퍼스레딩이 활성화되어 있지 않았습니다.

새로운 업무용 노트북에는 이제 하이퍼스레딩*이 apparently 활성화되어 있는 것 같으니, 관리자 권한 없이 새로운 안내를 따라갈 수 있는지 확인해 보겠습니다.

* wmic CPU Get NumberOfCores,NumberOfLogicalProcessors 명령을 실행하면 물리 코어보다 논리 코어가 더 많은 것으로 표시됩니다.

안녕하세요,

CSS로 수정할 수 있을 것 같습니다.

.cooked a {
  @include user-select(text);
}

도움이 되길 바랍니다. 아직 제대로 테스트하지는 않았지만 잘 동작하는 것 같습니다. :slightly_smiling_face:

수정: user-select: text는 링크에 추가되어야 합니다. .cooked의 선택된 텍스트뿐만 아니라 사이트 전체의 선택된 텍스트가 영향을 받기 때문입니다. 코드를 변경했습니다.

6개의 좋아요

저한테는 마법처럼 보여요. 어떻게 작동하는지 궁금한데, 이 트릭을 설명해 주실 수 있나요? :hugs:

2개의 좋아요

훌륭한 탐구였어요, Don. PR을 제출해 보시겠어요?

6개의 좋아요

샘, 감사합니다. 제출하기 전에 더 자세히 테스트해 봤는데, 안타깝게도 이것만으로는 부족합니다. 이 솔루션은 크롬에서만 작동합니다.

5개의 좋아요

버그를 일으키는 코드 조각입니다 (app/assets/javascripts/discourse/app/lib/click-track.js에서 가져옴)

    // Cancel click if triggered as part of selection.
    const selection = window.getSelection();
    if (selection.type === "Range" || selection.rangeCount > 0) {
      if (selectedText() !== "") {
        return true;
      }
    }

이 코드를 제거하면 문제가 해결되며, 테스트가 깨지는 것처럼 보이지 않습니다 (어떤 이유에서인지 변경 전후로 일부 테스트가 실패했지만, 새로운 실패는 발생하지 않은 것 같습니다).
그래서 이 코드가 실제로 유용한 역할을 하는지 궁금합니다. 이 코드가 분명히 수행하지 않는 것이 하나 있는데, 바로 코드가 명시한 동작입니다. 만약 코드가 명시한 대로 동작했다면, 버그 보고자가 ‘선택 + 클릭’ 시 링크를 전혀 따르지 않았을 텐데, 그것이 그의 불만은 아니었으니까요.
이 코드가 달성하려는 목적이 무엇인지 공유해 주실 수 있나요?

1개의 좋아요

아마도 텍스트를 선택하여 인용하거나 복사할 때 링크가 새 탭에서 열리지 않도록 방지하기 위해 그렇게 만든 것일까요?

발견하신 코드가 비활성화된 상태에서 “모든 외부 링크를 새 탭에서 열기” 옵션이 체크되어 있을 때,

링크가 포함된 텍스트를 선택해 보시겠어요? (마우스 버튼을 누른 뒤 드래그하고, 마우스 버튼을 놓는 방식) 링크가 열리지 않는지 확인해 보세요.

링크를 완전히 감싸는 선택도 해보고, 링크 중간에서 끝나는 선택도 해보시는 게 좋겠습니다.

선택은 항상 텍스트를 선택하는 것만 되어야 하며, 링크를 열어서는 안 됩니다.

예, 이러한 선택은 링크를 따르거나 새 탭에서 열지 않고 예상대로 작동합니다.

1개의 좋아요

특정 브라우저에 대한 우회 방법이 있었던 것 같은데, Safari/Firefox/Chrome에서 선택을 시도해 보며 어떤 브라우저에서 문제가 발생하는지 확인해 볼 수 있을까요?

1개의 좋아요

Firefox와 Chrome에서는 작동합니다. Ubuntu에서 Safari를 어떻게 테스트해야 할까요?

1개의 좋아요

개발 서버가 Wi-Fi를 통해 접근 가능해서 스마트폰으로도 테스트할 수 있나요?

터치스크린의 손가락 드래그 이벤트가 링크를 여는 것을 트리거하고 있을 수 있습니다.

이 스마트폰 브라우저(Firefox, Chromium 기반 또는 Safari)를 테스트 대상 브라우저 목록에 추가할 수 있습니다. :smiling_face_with_sunglasses:

그리고, 아, 이 버그에 대한 여러분의 작업에 정말 감사드립니다!!

이 취소 코드에 대한 이유를 찾았네요:

사용자가 주제에서 내용을 선택한 상태에서 링크 위에 마우스를 놓았을 때 클릭을 방지합니다.

https://meta.discourse.org/t/selecting-a-link-results-in-it-being-opened/14846
[삭제된 주제]

흥미로운 댓글:

저는 테스트를 위해 Windows 플랫폼에만 접근 권한이 있습니다.

이 수정 사항은 파일을 통째로 콘솔에 붙여넣을 수 있으므로 쉽게 테스트할 수 있습니다.

@sam 주제 페이지를 로드한 후 콘솔에 붙여넣어야 할 파일이 무엇인지 알고 계신가요?
@Aleksey_Bogdanov 그 파일을 주시면, 저는 Windows Vivaldi, Firefox, Android 9 Kiwi 브라우저 콘솔에 붙여넣을 수 있고, 당신은 iOS, Mac OS Safari에 붙여넣을 수 있습니다.

더 이상 그렇게 작동하지 않는다고 생각합니다.

1개의 좋아요

안드로이드에서 크롬과 파이어폭스에는 문제가 발견되지 않았지만, 파이어폭스에서 텍스트를 선택하는 데는 여전히 어려움을 겪고 있습니다.

1개의 좋아요

너의 변경 사항 이전에도 그랬지?