성가신 "더 읽기"를 추가하는 사이트는 ShareThis입니다.
이 나쁜 행동을 방지하기 위해 세 가지 대안이 있습니다.
클립 보드 이벤트 비활성화
이 웹 사이트는 클립 보드 API를 사용하여 웹 개발자가 복사 / 잘라 내기 / 붙여 넣기 작업을 가로 채고 수행 될 때 일부 코드를 실행할 수 있도록합니다. 이것이 ShareThis (및 이와 유사한 다른 웹 사이트)의 작동 방식입니다. 그것은 단순히 복사 이벤트를 기다리고 효과적인 복사가 수행되기 직전에 성가신 "-See ..."를 포함하는 텍스트의 "계층"을 추가합니다.
이제 질문은 : 클립 보드 이벤트를 비활성화하는 방법이 있습니까? 불행히도 Chrome / Chrome 에서이 작업을 수행 할 수있는 방법을 찾지 못했지만 Firefox에서는 두 가지 방법으로 가능합니다.
- 에 들어가서
about:config
검색하십시오 dom.event.clipboardevents.enabled
. 키를 두 번 클릭하고 (로 설정 false
) 짜잔! 클립 보드 이벤트를 사용 중지했으며 아무도 클립 보드를 다시 만지지 않습니다.
- 이전 버전의 Firefox (실제로는 이전 버전) 의 경우 옵션 과 동일한 기능 을 수행하는 이 확장 이
about:config
있습니다.
클립 보드 이벤트를 사용 중지하면 거의 사용되지 않으며 스팸 사용 이외의 웹 사이트 사용 목적이 없으므로 웹 사이트 사용 환경이 손상되지 않아야합니다.
두 번째 해결책으로 넘어 갑시다.
블록 공유
ShareThis가 필요하지 않은 경우 w.sharethis.com
도메인을 간단히 차단할 수 있습니다. ShareThis로드 (및 등록 ClipboardEvent
)를 담당하는 Javascript 는 해당 웹 사이트에서로드됩니다.
간단한 AdBlock 필터에서 호스트 파일 편집에 이르기까지 다양한 방식으로 차단 할 수 있습니다 (평판으로 인해 더 많은 링크를 넣을 수 없으므로 여기에서 다루거나 링크하지 않습니다).
hosts
파일 을 통해이를 수행하는 예 :
127.0.0.1 w.sharethis.com
세 번째 솔루션은 가장 어려운 솔루션이며 최후의 수단으로 만 사용해야합니다.
문제가있는 웹 사이트에서 선택 기능을 사용하지 않도록 설정
클립 보드에 복사 된 컨텐츠를 편집하기 위해 이러한 웹 사이트 Selection
는 선택을 즉시 편집 할 수 있는 API를 사용합니다. 따라서 해결책은 모든 종류의 코드 를 완전히 비활성화하는 것입니다 Selection
(코드 쪽에서는 분명히 선택을 수행 할 수 있습니다).
간단한 Tampermonkey / Greasemonkey 스크립트로이를 수행 할 수 있습니다. Chrome을 지금 설치할 수 없으므로 Firefox에서만 테스트했습니다. 유감 이군.
이것은 소스 코드입니다.
// ==UserScript==
// @name Goodbye selections
// @namespace tag: utils
// @include $put_here_a_website_you'd_like_to_disable_selections$
// @include $more_websites$
// @version 1
// @grant none
// ==/UserScript==
(function() {
var disableSelections = function() {
document.getSelection = window.getSelection = function() {
return { isCollapsed: true };
};
};
var script = document.createElement ("script");
script.appendChild (document.createTextNode ("(" + disableSelections + ")();"));
(document.body || document.head || document.documentElement).appendChild (script);
})();
이 작업을 수행하려면 새로운 Greasemonkey / Tampermonkey 스크립트를 작성하고 @include
지시문을 조정해야 합니다. 한 줄에 하나의 웹 사이트를 넣을 수 있으며 다음과 같이 수행해야합니다 @include http://bad.website.address/
.
나는 당신이 링크 한 웹 사이트 모두에서 테스트했으며 아무런 문제없이 작동합니다. 그러나 Selection
완벽하게 합법적 인 웹 사이트에서 s를 사용하기 때문에 문제가 발생할 수 있습니다 (예 : StackExchange 텍스트 상자를 사용하면 버튼을 클릭 할 때 기호를 삽입하여 캐럿 위치에 배치). 해당 사용자 스크립트는 문제가있는 웹 사이트에서만 가능합니다.
( //
Greasemonkey / Tampermonkey 메뉴에서 사용자 스크립트를 작성하는 경우 시작하여 줄을 제거해야 할 수도 있습니다.)
사용자 스크립트에 대한 설명은 매우 간단합니다. 먼저, disableSelections
기본 document.getSelection
과 window.getSelection
함수를 단순히를 포함하는 객체를 반환하는 것으로 대체하는 명명 된 함수를 정의합니다 { isCollapsed: true }
. 왜? ShareThis (JS 코드에서 확인)는 해당 함수를 호출하고 isCollapsed
속성이 설정되어 있는지 확인합니다 true
( 설정된 경우 "클립 보드 중독"을 중지합니다). 이와 같은 다른 웹 사이트는 해당 검사를 수행하지 않을 수도 있지만 Selection
객체 의 합법적 기능을 호출하려고 할 때 오류가 발생 합니다.
그런 다음 본문 / 헤더 / 문서에 기능이 삽입되고 자동으로 실행됩니다. Javascript가 모든 기능을 (거의) 무시할 수 있다면 addEventListener
이벤트를 복사 / 잘라 내기 / 붙여 넣기 할 때 아무것도하지 않기 위해 함수를 무시하지 않은 이유는 무엇입니까? 대답은 매우 간단합니다. 사용자 스크립트는 쉽게 예측할 수없는 시간에 실행됩니다. 즉, ShareThis Javascript를 사용자 스크립트 보다 먼저 로드 할 수 있으며 아무 것도 수행하지 않습니다. 대신 window.getSelection
함수를 재정의하면 복사가 수행 될 때만 해당 함수가 호출 되므로 문제가 발생하지 않으며 텍스트를 복사 할 때 사용자 스크립트가 이미로드되었는지 100 % 확신합니다.
결론
실질적으로 쓸모없는 API를 사용할 수 없으므로 가장 깨끗하고 가장 좋은 솔루션은 분명히 첫 번째 솔루션입니다.
두 번째 것도 유효하지만 ShareThis 기능이 손실됩니다.
세 번째는 가장 "해킹 된"것이지만, 최후의 수단으로 작동 할 수 있습니다.