เว็บไซต์ที่เพิ่มสิ่งที่ "อ่านเพิ่มเติม" ที่น่ารำคาญคือ ShareThis
เพื่อป้องกันพฤติกรรมที่ไม่ดีนี้คุณมีทางเลือกสามทาง:
ปิดใช้งานเหตุการณ์คลิปบอร์ด
เว็บไซต์เหล่านี้ใช้API คลิปบอร์ดซึ่งช่วยให้นักพัฒนาเว็บสามารถสกัดกั้นการกระทำการคัดลอก / ตัด / วางและเรียกใช้โค้ดบางอย่างเมื่อดำเนินการ นี่คือการทำงานของ ShareThis (และเว็บไซต์อื่น ๆ เช่นนั้น) มันรอเหตุการณ์การคัดลอกและทันทีก่อนที่จะมีการคัดลอกที่มีประสิทธิภาพจะเพิ่ม "เลเยอร์" เพิ่มเติมของข้อความที่มี "- ดู ... " ที่น่ารำคาญ
ตอนนี้คำถามคือ: มีวิธีการปิดการใช้งานเหตุการณ์คลิปบอร์ดชนิดใด? น่าเสียดายที่ฉันไม่สามารถค้นหาวิธีการดังกล่าวได้ใน Chrome / Chromium แต่ใน Firefox มันเป็นไปได้ด้วยสองวิธีที่แตกต่างกัน
- ไปในและค้นหา
about:config
dom.event.clipboardevents.enabled
ดับเบิลคลิกที่คีย์ (ตั้งค่าเป็นfalse
) และ voila! คุณได้ปิดการใช้งานเหตุการณ์คลิปบอร์ดและไม่มีใครจะสัมผัสคลิปบอร์ดของคุณอีกครั้ง
- สำหรับ Firefox รุ่นเก่า (จริงๆแล้วเก่ากว่าจริง ๆ ) มีส่วนขยายนี้ซึ่งทำสิ่งเดียวกันกับ
about:config
ตัวเลือก
การปิดใช้งานเหตุการณ์คลิปบอร์ดไม่ควรสร้างความเสียหายต่อประสบการณ์การใช้งานของเว็บไซต์ใด ๆ เนื่องจากไม่ได้ใช้งานบ่อยนักและไม่มีวัตถุประสงค์ในการใช้ (ยกเว้นสแปม)
ลองตรงไปที่วิธีแก้ปัญหาที่สอง
บล็อก ShareThis
หากคุณไม่ต้องการ ShareThis คุณสามารถบล็อกw.sharethis.com
โดเมนได้ Javascript ที่รับผิดชอบในการโหลด ShareThis (และการลงทะเบียนClipboardEvent
) ถูกโหลดจากเว็บไซต์นั้น
คุณสามารถบล็อกได้หลายวิธีตั้งแต่ตัวกรอง AdBlock แบบง่ายไปจนถึงการแก้ไขไฟล์โฮสต์ของคุณ (นี่ไม่ครอบคลุมหรือเชื่อมโยงที่นี่เนื่องจากฉันไม่สามารถใส่ลิงก์เพิ่มเติมเนื่องจากชื่อเสียงของฉัน)
ตัวอย่างของการทำเช่นนั้นผ่านhosts
ไฟล์:
127.0.0.1 w.sharethis.com
วิธีที่สามคือวิธีที่ยากที่สุดและควรใช้เป็นทางเลือกสุดท้ายเท่านั้น
ปิดใช้งานคุณสมบัติการเลือกบนเว็บไซต์ที่มีปัญหา
หากต้องการแก้ไขเนื้อหาที่คัดลอกไปยังคลิปบอร์ดเว็บไซต์เหล่านี้ใช้Selection
API ซึ่งช่วยให้พวกเขาสามารถแก้ไขการเลือกได้ทันที ดังนั้นการแก้ปัญหาคือการปิดการใช้งานทุกประเภทอย่างสมบูรณ์Selection
(ในด้านรหัสเห็นได้ชัดว่าคุณจะยังคงสามารถเลือกได้)
ซึ่งสามารถทำได้ด้วยสคริปต์ Tampermonkey / Greasemonkey อย่างง่าย ฉันทดสอบบน Firefox เท่านั้นเนื่องจากฉันไม่สามารถติดตั้ง Chrome ได้ในตอนนี้ ฉันขอโทษสำหรับสิ่งนั้น
นี่คือซอร์สโค้ด:
// ==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
มีการใช้งานเว็บไซต์ที่สมบูรณ์แบบ (เช่นกล่องข้อความ StackExchange ใช้เพื่อแทรกสัญลักษณ์เมื่อคุณคลิกที่ปุ่มไปยังตำแหน่งของคาเร็ต) ดังนั้นคุณควรเปิดใช้งาน userscript นั้นใช้กับเว็บไซต์ที่มีปัญหาเท่านั้น
(โปรดทราบว่าคุณอาจจำเป็นต้องลบบรรทัดที่ขึ้นต้นด้วย//
หากคุณสร้าง userscript จากเมนู Greasemonkey / Tampermonkey พวกเขาจะเพิ่มโดยอัตโนมัติ)
คำอธิบายของ userscript นั้นค่อนข้างง่าย ครั้งแรกก็กำหนดฟังก์ชั่นที่มีชื่อdisableSelections
ซึ่งแทนที่เริ่มต้นdocument.getSelection
และฟังก์ชั่นกับคนที่เพียงแค่ส่งกลับวัตถุที่มีwindow.getSelection
{ isCollapsed: true }
ทำไม? เนื่องจาก ShareThis (ฉันตรวจสอบในรหัส JS) เรียกใช้ฟังก์ชันนั้นและตรวจสอบว่าisCollapsed
มีการตั้งค่าคุณสมบัติเป็นtrue
(ถ้าเป็นมันจะหยุด "พิษคลิปบอร์ด") เว็บไซต์อื่น ๆ เช่นนั้นอาจจะไม่ทำการตรวจสอบนั้น แต่พวกเขาจะลงเอยด้วยข้อผิดพลาดเมื่อพยายามเรียกฟังก์ชันที่ถูกต้องของSelection
วัตถุ
จากนั้นฟังก์ชั่นจะถูกฉีดเข้าไปในร่างกาย / ส่วนหัว / เอกสารและมันจะถูกดำเนินการโดยอัตโนมัติ คำถามที่คุณอาจถามคือ: หาก Javascript อนุญาตให้แทนที่ (เกือบ) ทุกฟังก์ชั่นทำไมคุณไม่แทนที่addEventListener
ฟังก์ชั่นเพื่อไม่ทำอะไรเลยเมื่อกิจกรรมคัดลอก / ตัด / วาง คำตอบนั้นง่ายมาก userscript ดำเนินการในเวลาที่ไม่สามารถคาดเดาได้ง่ายซึ่งหมายความว่าจาวาสคริปต์ ShareThis สามารถโหลดได้ก่อน userscript และจะไม่ทำอะไรเลย แต่โดยการแทนที่window.getSelection
ฟังก์ชั่นจะไม่มีปัญหาใด ๆ เนื่องจากฟังก์ชั่นนั้นจะถูกเรียกก็ต่อเมื่อมีการคัดลอกและเรามั่นใจ 100% ว่าเมื่อคุณคัดลอกข้อความ userscript จะถูกโหลดแล้ว
ข้อสรุป
ทางออกที่ดีที่สุดและสะอาดที่สุดเห็นได้ชัดว่าเป็นโซลูชั่นแรกเนื่องจากปิดใช้งาน API ที่ไร้ประโยชน์
อันที่สองก็ใช้ได้เช่นกัน แต่คุณจะสูญเสียฟังก์ชันใด ๆ ของ ShareThis
อันที่สามคือแฮ็คที่ "แฮ็ค" ที่สุด แต่สุดท้ายก็สามารถใช้งานได้