Trang web thêm nội dung "Đọc thêm" gây phiền nhiễu là Share This.
Để ngăn chặn hành vi xấu này, bạn có ba lựa chọn thay thế khác nhau:
Vô hiệu hóa các sự kiện clipboard
Các trang web này đang sử dụng API Clipboard , cho phép các nhà phát triển web chặn các hành động sao chép / cắt / dán và thực thi một số mã khi chúng được thực hiện. Đây là cách Share This (và các trang web khác như thế) hoạt động. Nó chỉ đơn giản là chờ đợi sự kiện sao chép và ngay trước khi bản sao hiệu quả được thực hiện, nó sẽ thêm một "lớp" văn bản có chứa sự phiền toái "- Xem ...".
Bây giờ câu hỏi là: có bất kỳ loại phương pháp để vô hiệu hóa các sự kiện clipboard? Thật không may, tôi không thể tìm thấy một phương pháp để làm điều này trong Chrome / Chromium, nhưng trong Firefox thì có thể theo hai cách khác nhau.
- Đi vào
about:config
và tìm kiếm dom.event.clipboardevents.enabled
. Nhấp đúp chuột vào phím (đặt thành false
) và voila! Bạn đã vô hiệu hóa các sự kiện clipboard và không ai sẽ chạm vào clipboard của bạn một lần nữa.
- Đối với các phiên bản Firefox cũ hơn (thực sự, thực sự cũ hơn), có phần mở rộng này thực hiện chính xác cùng một
about:config
tùy chọn.
Vô hiệu hóa các sự kiện trong bảng tạm sẽ không làm hỏng trải nghiệm của bất kỳ trang web nào vì chúng hiếm khi được sử dụng và thực sự không có mục đích sử dụng chúng (ngoài spam).
Hãy đi đến giải pháp thứ hai.
Chặn Share This
Nếu bạn không cần Share This, bạn chỉ cần chặn w.sharethis.com
tên miền. Javascript chịu trách nhiệm tải Share This (và đăng ký ClipboardEvent
) được tải từ trang web đó.
Bạn có thể chặn nó theo nhiều cách khác nhau, từ bộ lọc AdBlock đơn giản đến chỉnh sửa tệp máy chủ của bạn (điều này không được bảo vệ hay liên kết ở đây vì tôi không thể đặt thêm liên kết do danh tiếng của mình).
Một ví dụ về việc đó thông qua hosts
tệp:
127.0.0.1 w.sharethis.com
Giải pháp thứ ba là giải pháp khó nhất và chỉ nên sử dụng như là phương sách cuối cùng.
Vô hiệu hóa tính năng lựa chọn trên các trang web có vấn đề
Để chỉnh sửa nội dung được sao chép vào bảng tạm, các trang web này sử dụng Selection
API cho phép họ chỉnh sửa các lựa chọn một cách nhanh chóng. Vì vậy, một giải pháp là vô hiệu hóa hoàn toàn bất kỳ loại nào Selection
(về phía mã, rõ ràng. Bạn vẫn có thể thực hiện các lựa chọn).
Điều này có thể được thực hiện với một tập lệnh Tampermonkey / Greasemonkey đơn giản. Tôi chỉ thử nghiệm nó trên Firefox vì tôi không thể cài đặt Chrome ngay bây giờ. Tôi xin lỗi vì điều đó.
Đây là mã nguồn:
// ==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);
})();
Để cho phép công việc này, bạn nên tạo một tập lệnh Greasemonkey / Tampermonkey mới và điều chỉnh các @include
chỉ thị. Bạn có thể đặt một trang web trên mỗi dòng và nó phải được thực hiện như thế nào@include http://bad.website.address/
.
Tôi đã thử nghiệm nó với cả các trang web bạn đã liên kết và nó hoạt động không có vấn đề. Tuy nhiên, hãy nhớ rằng điều này có thể gây ra vấn đề kể từ khiSelection
các trang web hoàn toàn hợp pháp được sử dụng (ví dụ: hộp văn bản StackExchange sử dụng chúng để chèn ký hiệu, khi bạn nhấp vào nút, đến vị trí của dấu mũ của bạn), vì vậy bạn nên bật mà usercript chỉ trên các trang web có vấn đề.
(lưu ý rằng bạn có thể cần xóa các dòng bắt đầu bằng //
nếu bạn đang tạo bản mô tả người dùng từ menu Greasemonkey / Tampermonkey, họ sẽ tự động thêm nó)
Giải thích về usercript khá đơn giản. Đầu tiên, nó định nghĩa một hàm có tên disableSelections
thay thế mặc định document.getSelection
và các window.getSelection
hàm bằng một hàm đơn giản trả về một đối tượng chứa { isCollapsed: true }
. Tại sao? Bởi vì Share This (tôi đã kiểm tra mã JS của họ) gọi hàm đó và kiểm tra xem thuộc isCollapsed
tính có được đặt thành true
(nếu có, nó dừng "ngộ độc clipboard"). Các trang web khác như thế có thể sẽ không thực hiện kiểm tra đó, nhưng chúng sẽ kết thúc đơn giản chỉ là một lỗi khi chúng cố gắng gọi một chức năng hợp pháp của Selection
đối tượng.
Sau đó, chức năng được đưa vào phần thân / tiêu đề / tài liệu và nó sẽ được thực hiện tự động. Một câu hỏi bạn có thể hỏi là: nếu Javascript cho phép ghi đè (gần như) mọi chức năng, tại sao bạn không ghi đè addEventListener
chức năng để không làm gì khi sự kiện được sao chép / cắt / dán? Câu trả lời là khá đơn giản. Một bản mô tả người dùng được thực thi tại một thời điểm không dễ dự đoán, điều này có nghĩa là Javascript này có thể được tải trước bản mô tả người dùng và nó sẽ không làm gì cả. Thay vào đó, bằng cách ghi đè window.getSelection
chức năng, sẽ không có vấn đề gì vì chức năng đó chỉ được gọi khi bản sao được thực hiện và chúng tôi chắc chắn 100% rằng khi bạn sao chép văn bản, bản mô tả người dùng đã được tải.
Phần kết luận
Giải pháp tốt nhất và sạch nhất rõ ràng là giải pháp đầu tiên, vì nó vô hiệu hóa một API thực tế vô dụng.
Cái thứ hai cũng hợp lệ, nhưng bạn sẽ mất bất kỳ chức năng Share This.
Cái thứ ba là cái "hacky" nhất, nhưng như là phương sách cuối cùng, nó có thể hoạt động.