ฉันจะป้องกัน“ อ่านเพิ่มเติม: www.site.com” จากการถูกฉีดด้วย JavaScript ที่ไม่ใช่ Tynt ในการคัดลอกวางได้อย่างไร


30

มีเว็บไซต์จำนวนมากที่แทรกบางสิ่งเช่น "อ่านเพิ่มเติม: www.site.com" ลงในคลิปบอร์ดของคุณเมื่อคุณคัดลอกข้อความในเบราว์เซอร์ของคุณ ฉันพบสิ่งที่น่ารังเกียจนี้ การค้นหา google เผยวิธีการบางอย่าง เพื่อหยุดสิ่งนี้หากเว็บไซต์ใช้บริการTynt (โดยบล็อกเฉพาะโดเมน Tynt) แต่เว็บไซต์จำนวนมากใช้ JavaScript ที่ผลิตเองในบ้าน

มีวิธีทั่วไปในการบล็อกพฤติกรรมนี้นอกเหนือจากการปิด JavaScript หรือไม่ ฉันใช้ Chrome แต่ฉันสนใจวิธีแก้ไขทั้งหมด

แก้ไข: เพื่อความชัดเจนฉันต้องการให้สามารถใช้งานฟังก์ชันส่วนที่เหลือของ JavaScript สำหรับเว็บไซต์เหล่านี้ได้เนื่องจากส่วนใหญ่จะไม่สามารถใช้งานได้

แก้ไข # 2: ต่อไปนี้เป็นเว็บไซต์ตัวอย่างสองเว็บไซต์ที่ยังคงสร้างความรำคาญแก่ฉันแม้จะมีการใช้ Tynt blocker: Marginal Revolution | เวลาการคลัง

ต่อไปนี้เป็นคำถามสองคำถามของStackOverflow และบล็อกโพสต์สองข้อความที่อธิบายวิธีการฝึกปฏิบัติแบบร่มรื่นนี้ด้วยตนเองโดยไม่ต้อง Tynt นี่คือโพสต์ในบล็อกที่อธิบายว่ามันยากขนาดไหนที่จะบล็อกได้อย่างน่าเชื่อถือ นี่คือการสนทนาล่าสุดที่ฉันสามารถหาได้ (มีนาคม 2013) ซึ่งให้คำแนะนำเกี่ยวกับวิธีการบล็อกสิ่งนี้ใน Chrome โดยใช้ AdBlock แต่มันไม่ได้ผลสำหรับฉัน

คำตอบ:


24

เว็บไซต์ที่เพิ่มสิ่งที่ "อ่านเพิ่มเติม" ที่น่ารำคาญคือ 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

วิธีที่สามคือวิธีที่ยากที่สุดและควรใช้เป็นทางเลือกสุดท้ายเท่านั้น

ปิดใช้งานคุณสมบัติการเลือกบนเว็บไซต์ที่มีปัญหา

หากต้องการแก้ไขเนื้อหาที่คัดลอกไปยังคลิปบอร์ดเว็บไซต์เหล่านี้ใช้SelectionAPI ซึ่งช่วยให้พวกเขาสามารถแก้ไขการเลือกได้ทันที ดังนั้นการแก้ปัญหาคือการปิดการใช้งานทุกประเภทอย่างสมบูรณ์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

อันที่สามคือแฮ็คที่ "แฮ็ค" ที่สุด แต่สุดท้ายก็สามารถใช้งานได้


ขอบคุณมาก! มันยอดเยี่ยมมาก เป็นเรื่องน่าละอายที่มันยากและไม่มีวิธีแก้ปัญหาที่สมบูรณ์แบบ แต่คำตอบของคุณดูเหมือนจะเป็นข้อมูลที่ดีที่สุดที่มีอยู่ในอินเทอร์เน็ตในปัจจุบัน ยินดีมากที่จะมอบรางวัลให้คุณ
Jess Riedel

ใช่ฉันได้ทำการวิจัยค่อนข้างมากเนื่องจากปัญหาดังกล่าวส่งผลกระทบต่อฉันเช่นกัน ขอบคุณสำหรับความกรุณาโดยวิธีนี้จะช่วยให้ประสบการณ์ StackExchange "ผู้มาใหม่" ของฉัน!
Robertof

Re: เว็บไซต์แรกบล็อกไซต์นี้ที่คุณสามารถคลิกปุ่มเพื่อคัดลอกข้อความได้หรือไม่ เช่นemojipedia.org/snowman สังเกตุใน Firefox ดูเหมือนจะไม่เป็นเช่นนั้น เย็น. Re: การบล็อก ShareThis ตัวดีบักของฉันกำลังแสดงสคริปต์ที่โหลดจากโดเมนย่อย "l.sharethis.com" และ "ws.sharethis.com" ดังนั้นฉันคิดว่าวิธีแก้แบบเต็มเท่านั้นกำลังปิดกั้นโดเมน ShareThis.com เต็มรูปแบบซึ่งไม่ควรสูญเสียครั้งใหญ่ ขอบคุณ @Robertof!
Conrad Meyer

ข้อควรระวัง: การปิดใช้งานเหตุการณ์คลิปบอร์ดอาจทำให้บางไซต์ทำงานผิดปกติ ตัวอย่างเช่นทำให้ Discord เกิดข้อผิดพลาดเมื่อวางลงในการค้นหา
นิโคลัส

2

การกระทำที่น่ารังเกียจเหล่านี้สามารถถูกบล็อกบน Chrome ด้วยส่วนขยาย "Kill Evil":

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

(แก้ไข) ส่วนขยายนี้ดูเหมือนว่าจะทำให้เกิดปัญหาแปลก ๆ บน Facebook โปรดตรวจสอบให้แน่ใจว่าได้อนุญาต


ยอดเยี่ยม ฉันได้พบสามส่วนขยายที่ตั้งใจจะแก้ปัญหานี้: 1. Tynt Blocker 2. RightToCopy 3. Kill Evil (ขอบคุณคุณนกนางนวล) ฆ่าความชั่วร้ายเป็นคนที่ทำงานเพื่อแก้ไขกิจวัตรคลิปบอร์ดที่น่ารังเกียจโดยเฉพาะอย่างยิ่งที่ phys.org,
เดฟเบอร์ตัน

1
ไม่ต้องกังวล @DaveBurton - โปรดทราบว่าส่วนขยายนี้ทำให้เว็บไซต์จำนวนมากทำงานค่อนข้างแปลก แต่เปิดใช้งานเมื่อคุณต้องการเท่านั้น
นกนางนวล

2
Kill Evil รองรับรายการยกเว้นหรือ "บัญชีขาว" ซึ่งเป็นรายการเว็บไซต์ที่คุณไม่ต้องการเปิดใช้งานส่วนขยาย (เช่นรายการ "อนุญาตความชั่วร้าย") นั่นไม่ใช่สิ่งที่ฉันต้องการ: ฉันแค่ต้องการเปิดใช้งาน Kill Evil เท่านั้นบนไซต์เฉพาะ (phys.org) ดังนั้นฉันจึงจบลงด้วยการแสดงออกปกติ "เชิงลบ lookahead" ที่ยุ่งยากนี้เพื่อปิดใช้งาน Kill Evil ยกเว้นหนึ่งไซต์นั้น: ^ https?: \ / \ / (?! ([a-zA-Z0-9 \ - \.] * phys \ .org))
Dave Burton

รัก regex นิดหน่อย ขอบคุณสำหรับการโพสต์
Seagull

1

แม้ว่าจะเป็น addon Firefox แต่NoScriptอนุญาตให้คุณบล็อก JavaScript จากเว็บไซต์ใด ๆ โดยการตั้งค่ารายการที่ไม่น่าเชื่อถือ


2
ขอบคุณสำหรับคำตอบ แต่นี่ไม่ใช่สิ่งที่ฉันต้องการ (ฉันต้องการบางสิ่งที่ไม่ทำลาย JavaScript ทุกที่บนไซต์) ฉันจะแก้ไขคำถามให้เฉพาะเจาะจงยิ่งขึ้น
Jess Riedel

1

หากคุณกำลังมองหาวิธีที่จะแก้ไข HTML โดยอัตโนมัติก่อนที่มันจะปรากฏขึ้น Greasemonkey เป็นเครื่องมือและคุณจะต้องสร้างสคริปต์ผู้ใช้ที่จะทำการดัดแปลง

จากบทความคู่มือผู้เริ่มต้นสำหรับสคริปต์ Greasemonkey ใน Google Chrome :

ตอนนี้ Chrome สนับสนุนสคริปต์ผู้ใช้อย่างเป็นธรรมชาติ คุณไม่จำเป็นต้องติดตั้งส่วนขยายพิเศษเพื่อใช้งาน ในความเป็นจริง Chrome ถือว่าสคริปต์ผู้ใช้แต่ละรายการเป็นส่วนเสริมเพื่อให้คุณสามารถจัดการและลบออกได้อย่างง่ายดาย

มีข้อมูลมากมายเกี่ยวกับ Greasemonkey ที่สามารถพบได้บนอินเทอร์เน็ตรวมถึงบทเรียนมากมาย ส่วนใหญ่จะใช้กับ Firefox โดยที่ Greasemonkey มีต้นกำเนิดมา แต่ก็ใช้กับ Chrome ได้แล้ววันนี้

เป็นเว็บไซต์ที่รับผิดชอบในการ "อ่านเพิ่มเติม" sharethis.comคือ หากคุณบล็อกสิ่งนี้ควรหยุด หากคุณมีชุดความปลอดภัยที่ติดตั้งไว้ให้ใช้เพื่อบล็อกไซต์ มิฉะนั้นคุณสามารถป้องกันได้โดยใช้ไฟล์โฮสต์ของคุณ

sharethis.comเป็นผู้ให้บริการที่ให้ Tynt กับสองเว็บไซต์ที่คุณให้ฉัน Tynt ดูเหมือนจะเป็นเทคโนโลยีมากกว่าเว็บไซต์ดังนั้นอาจมีผู้ให้บริการรายอื่น ๆ เช่นกัน แต่เราต้องหวังว่าพวกเขาจะค่อนข้างหายาก


โอเคขอบคุณ. โดยหลักการแล้วทุกอย่างในเว็บไซต์สามารถแก้ไขได้หากมีการใช้สคริปต์ greasemonkey (อย่างน้อยที่สุดฉันคิดว่าปัญหา JavaScript ใด ๆ สามารถแก้ไขได้โดย JavaScript เพิ่มเติม) เพื่อที่จะยอมรับคำตอบนี้สำหรับเงินรางวัลฉันต้องการข้อมูลมากขึ้นเกี่ยวกับวิธีการใช้งาน
Jess Riedel

ข้อมูลประเภทใด หนึ่งสามารถเริ่มต้นด้วยวิกิพีเดียที่จะช่วยให้การเชื่อมโยงที่สำคัญที่สุดรวมทั้งวิกิพีเดียและuserscripts.org
harrymc

บอกเด็ก ๆ ว่าคำอธิบายเกี่ยวกับวิธีการใช้งานที่ไม่ใช่ Tynt ทำงานอย่างไรและจะทำอย่างไรกับพวกเขา? จนถึงขณะนี้ไม่มีอะไรที่คุณเขียนมีความเฉพาะเจาะจงกับปัญหาการคัดลอกวาง (แทนที่จะเป็นจาวาสคริปต์ทั่วไป)
Jess Riedel

ฉันไม่เคยพบ Tynt (ไม่แปลกใจเลยที่ฉันใช้ NoScript) จากเว็บไซต์ตัวอย่างทั้งสองในบทความที่คุณเชื่อมโยงถึงเว็บไซต์หนึ่งหายไปและอีกเว็บไซต์หนึ่งไม่ได้ใช้ Tynt อีกต่อไป คุณมีตัวอย่างหรือไม่
harrymc

ฉันได้ทำการแก้ไขเพื่อเพิ่มเว็บไซต์ตัวอย่างสองแห่งที่ยังคงมีพฤติกรรมนี้อยู่แม้ว่าฉันจะใช้ส่วนขยายการบล็อก Tynt ก็ตาม
Jess Riedel

1

ใน Chromium ฉันประสบความสำเร็จด้วยการเปิดใช้งานส่วนขยายคลิกขวาและคัดลอกแน่นอน

เมื่อติดตั้งแล้วคุณสามารถเพิ่มรายชื่อผู้ใช้ของไซต์ที่เปิดใช้งานส่วนขยายในการกำหนดค่าตามความชอบ หรือเมื่อคุณอยู่ในหน้าใดหน้าหนึ่งและเห็นว่ามันยุ่งกับคลิปบอร์ดของคุณคุณสามารถเปิดใช้งานส่วนขยายนี้ได้ทันทีผ่านปุ่มแถบเครื่องมือ (ซึ่งจะเป็นการเพิ่มไซต์ลงในรายการของคุณโดยอัตโนมัติ)


0

หรือใช้ส่วนขยาย "คัดลอกเป็นข้อความล้วน" สำหรับ Chrome จากนั้นคุณมีตัวเลือกเพิ่มเติมในเมนูนอกเหนือจากการคัดลอกปกติ มันมีข้อดีที่จะทำงานใน Chrome และจะไม่ทำลายอะไรเลย https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog


จากชื่อคุณคิดว่าการคัดลอกข้อความที่จัดรูปแบบแตกหรือไม่ บางครั้งก็มีประโยชน์กับบางคน
Conrad Meyer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.