Làm cách nào để tôi ngăn chặn Đọc thêm: www.site.com. Không bị tiêm JavaScript không Tynt vào các hành động sao chép-dán?


30

Có nhiều trang web chèn một cái gì đó như "Đọc thêm: www.site.com" vào bảng tạm của bạn khi bạn sao chép văn bản trong trình duyệt của mình. Tôi thấy điều này gớm ghiếc. Một tìm kiếm google cho thấy một số phương pháp để ngăn chặn điều này nếu trang web tình cờ sử dụng dịch vụ Tynt (chỉ bằng cách chặn tên miền Tynt), nhưng nhiều trang web sử dụng JavaScript tự phát triển.

Có cách nào chung để chặn hành vi này ngoài việc tắt JavaScript không? Tôi sử dụng Chrome nhưng tôi quan tâm đến tất cả các giải pháp.

EDIT: Để rõ ràng, tôi muốn có thể giữ phần còn lại của chức năng JavaScript cho các trang web này, vì nhiều trang web sẽ bị hỏng nếu không có nó.

EDIT # 2: Đây là hai trang web ví dụ tiếp tục quấy rối tôi mặc dù tôi sử dụng trình chặn Tynt: Marginal Revolution |Thời báo tài chính

Dưới đây là hai StackOverflow câu hỏi và hai blog của bài viết mà giải thích cách để thực hiện thực hành râm này bằng tay mà không Tynt. Đây là một bài viết trên blog mô tả mức độ khó của việc này hóa ra là khó tin. Đây là cuộc thảo luận gần đây nhất mà tôi có thể tìm thấy (tháng 3 năm 2013) đưa ra các đề xuất về cách chặn điều này trong Chrome bằng AdBlock, nhưng nó không hiệu quả với tôi.

Câu trả lời:


24

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:configvà 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:configtù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.comtê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 hoststệ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 SelectionAPI 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 @includechỉ 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 disableSelectionsthay thế mặc định document.getSelectionvà các window.getSelectionhà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 isCollapsedtí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 đè addEventListenerchứ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.getSelectionchứ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.


Cảm ơn nhiều! Thật tuyệt vời. Thật xấu hổ vì điều này rất khó và không có giải pháp hoàn hảo, nhưng câu trả lời của bạn dường như là thông tin tốt nhất hiện có trên internet. Rất hân hạnh được thưởng cho bạn tiền thưởng.
Jess Riedel

Vâng, tôi đã nghiên cứu khá nhiều vì vấn đề đó cũng ảnh hưởng đến tôi. Cảm ơn bạn vì tiền thưởng bằng cách này - điều này sẽ giúp trải nghiệm StackExchange "người mới" của tôi!
Robertof

Re: cái đầu tiên, điều này có chặn các trang web nơi bạn có thể nhấp vào nút để sao chép một số văn bản không? Ví dụ: emojipedia.org/snowman . Theo kinh nghiệm, trong Firefox, nó dường như không. Mát mẻ. Re: chặn Share This, trình gỡ lỗi của tôi hiện đang hiển thị các tập lệnh đang tải từ các tên miền phụ "l.sharethis.com" và "ws.sharethis.com". Vì vậy, tôi nghĩ rằng cách chữa trị đầy đủ duy nhất là chặn toàn bộ tên miền Share This.com, điều này sẽ không mất gì nhiều. Cảm ơn @Robertof!
Conrad Meyer

Thận trọng: vô hiệu hóa các sự kiện clipboard có thể khiến một số trang web gặp trục trặc. Ví dụ, nó khiến Discord gặp sự cố khi dán vào tìm kiếm.
Nicholas

2

Những hành động đáng ghét này có thể bị chặn trên Chrome với tiện ích mở rộng "Kill Evil":

https://chrom.google.com.vn/webstore/detail/kill-evil/epieehnpcepgfiildhdklacomihpoldk

(EDIT) Tiện ích mở rộng này dường như gây ra sự cố kỳ lạ trên facebook, hãy chắc chắn đưa vào danh sách trắng.


Xuất sắc! Tôi đã tìm thấy ba tiện ích mở rộng để giải quyết vấn đề này: 1. Trình chặn Tynt. 2. Quyền ToCopy. 3. Giết ác (nhờ bạn, hải âu). Kill Evil là người đã làm việc để khắc phục các thao tác clipboard đặc biệt khó chịu tại Phys.org,
Dave Burton

1
đừng lo lắng @DaveBurton - xin lưu ý rằng tiện ích mở rộng này khiến nhiều trang web hoạt động khá kỳ lạ, tuy nhiên, vì vậy chỉ kích hoạt nó khi bạn cần.
hải âu

2
Kill Evil hỗ trợ danh sách loại trừ hoặc "danh sách trắng", đây là danh sách các trang web mà bạn KHÔNG muốn tiện ích mở rộng được bật (ví dụ: danh sách "cho phép cái ác"). Đó không phải là điều tôi muốn: Tôi chỉ muốn kích hoạt Kill Evil CHỈ trên một trang web cụ thể (Phys.org). Vì vậy, tôi đã kết thúc với biểu thức thông thường "nhìn tiêu cực" khó hiểu này, để vô hiệu hóa Kill Evil ngoại trừ một trang web đó: ^ https ?: \ / \ / (?! ([A-zA-Z0-9 \ - \.] * Phys \ .org))
Dave Burton

Yêu một chút táo bạo của regex. Cảm ơn đã đăng nó.
hải âu

1

Mặc dù là một addon Firefox, NoScript cho phép bạn chặn JavaScript từ bất kỳ trang web nào bằng cách thiết lập một danh sách không đáng tin cậy.


2
Cảm ơn câu trả lời, nhưng đây không phải là điều tôi cần. (Tôi muốn một cái gì đó không phá vỡ JavaScript ở mọi nơi trên trang web.) Tôi sẽ chỉnh sửa câu hỏi để cụ thể hơn.
Jess Riedel

1

Nếu bạn đang tìm cách tự động sửa đổi HTML trước khi nó được hiển thị, thì Greasemonkey là công cụ và bạn sẽ cần tạo một tập lệnh người dùng thực hiện sửa đổi.

Từ bài viết Hướng dẫn cho người mới bắt đầu về Tập lệnh Greasemonkey trong Google Chrome :

Chrome hiện hỗ trợ tập lệnh người dùng. Bạn không phải cài đặt một phần mở rộng bổ sung để sử dụng chúng; thực tế, Chrome coi mỗi tập lệnh người dùng là một addon riêng lẻ để bạn có thể dễ dàng quản lý và xóa chúng.

Có rất nhiều thông tin về Greasemonkey được tìm thấy trên Internet, bao gồm nhiều hướng dẫn. Hầu hết trong số chúng sẽ dành cho Firefox, nơi Greasemonkey có nguồn gốc, nhưng ngày nay chúng cũng áp dụng cho Chrome.

Là trang web chịu trách nhiệm cho "Đọc thêm" sharethis.com. Nếu bạn chặn nó, điều này sẽ dừng lại. Nếu bạn có một bộ bảo mật được cài đặt, hãy sử dụng nó để chặn trang web. Nếu không, bạn có thể chặn nó bằng cách sử dụng tập tin máy chủ của bạn .

sharethis.comlà nhà cung cấp cung cấp Tynt cho hai trang web mà bạn đã cung cấp cho tôi. Tynt có vẻ là một công nghệ hơn là một trang web, vì vậy tất nhiên có thể có những nhà cung cấp khác như vậy, nhưng người ta phải hy vọng rằng chúng sẽ khá hiếm.


Được rồi cảm ơn. Về nguyên tắc, bất cứ thứ gì trên một trang web đều có thể được sửa nếu áp dụng một tập lệnh greasemonkey. (Ít nhất, tôi cho rằng bất kỳ vấn đề JavaScript nào cũng có thể được khắc phục bằng nhiều JavaScript hơn.) Để chấp nhận câu trả lời này cho tiền thưởng, tôi cần nhiều thông tin hơn về cách triển khai nó.
Jess Riedel

Những loại thông tin? Người ta có thể bắt đầu với wikipedia cung cấp các liên kết quan trọng nhất bao gồm wikiuserscripts.org .
harrymc

Nói, một lời giải thích về cách các triển khai phi Tynt hoạt động và chính xác những gì sẽ được thực hiện về chúng? Cho đến nay, không có gì bạn viết thậm chí là cụ thể cho vấn đề sao chép-dán này (thay vì JavaScript nói chung).
Jess Riedel

Tôi chưa bao giờ gặp Tynt (không có gì lạ khi tôi sử dụng NoScript). Từ hai trang web mẫu trong bài viết mà bạn liên kết đến, một trang đã biến mất và trang kia không sử dụng Tynt nữa. Bạn có một ví dụ?
harrymc

Tôi đã thực hiện chỉnh sửa để thêm hai trang web mẫu tiếp tục có hành vi này ngay cả khi tôi sử dụng tiện ích mở rộng chặn Tynt.
Jess Riedel

1

Trên Chromium, tôi đã thành công với tiện ích mở rộng Nhấp chuột phải & Sao chép tuyệt đối .

Sau khi cài đặt nó, bạn có thể thêm danh sách người dùng của các trang web nơi tiện ích mở rộng được bật trong tùy chọn. Hoặc, khi bạn đang ở trên một trang cụ thể và thấy rằng nó làm căng với bảng tạm của bạn, bạn có thể bật tiện ích mở rộng này một cách nhanh chóng thông qua nút thanh công cụ của nó (điều này sẽ tự động thêm trang web vào danh sách của bạn).


0

Hoặc, sử dụng tiện ích mở rộng "Sao chép dưới dạng văn bản thuần túy" cho Chrome. Sau đó, bạn có một tùy chọn bổ sung trong menu bên cạnh sao chép bình thường. Nó có ưu điểm là nó hoạt động trong Chrome và không phá vỡ bất cứ thứ gì. https://chrom.google.com.vn/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrom-app-launcher-info-dialog


Từ tên, bạn sẽ nghĩ rằng nó phá vỡ sao chép văn bản định dạng? Điều đó đôi khi hữu ích với một số người.
Conrad Meyer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.