मैं कैसे "और पढ़ें: www.site.com" को गैर-टिंट जावास्क्रिप्ट के साथ कॉपी-पेस्ट क्रियाओं में इंजेक्ट होने से रोकता हूं?


30

जब आप अपने ब्राउज़र में टेक्स्ट कॉपी करते हैं, तो ऐसी कई साइटें होती हैं, जो आपके क्लिपबोर्ड में "Read more: www.site.com" जैसी कुछ चीज़ें डालती हैं। मुझे यह घिनौना लगता है। एक Google खोज ने इसे रोकने के लिए कुछ तरीकों का खुलासा किया है यदि वेबसाइट सेवा Tynt (सिर्फ Tynt डोमेन को अवरुद्ध करके) का उपयोग कर रही है, लेकिन कई वेबसाइटें घर-विकसित जावास्क्रिप्ट का उपयोग करती हैं।

क्या जावास्क्रिप्ट को बंद करने के अलावा इस व्यवहार को अवरुद्ध करने का एक सामान्य तरीका है? मैं क्रोम का उपयोग करता हूं लेकिन मुझे सभी समाधानों में दिलचस्पी है।

संपादित करें: स्पष्ट होने के लिए, मैं इन वेबसाइटों के लिए जावास्क्रिप्ट की बाकी कार्यक्षमता को बनाए रखने में सक्षम होना चाहता हूं, क्योंकि कई इसके बिना टूट जाएंगे।

EDIT # 2: यहां दो उदाहरण वेबसाइटें हैं जो एक टिंट अवरोधक के उपयोग के बावजूद मुझे परेशान करना जारी रखती हैं: सीमांत क्रांति | द फिस्कल टाइम्स

यहाँ दो StackOverflow प्रश्न और दो ब्लॉग पोस्ट हैं जो Tynt के बिना मैन्युअल रूप से इस छायादार अभ्यास को लागू करने के तरीके बताते हैं। यहाँ एक ब्लॉग पोस्ट का वर्णन है कि मज़बूती से ब्लॉक करने के लिए यह कितना कठिन है। यहां सबसे हालिया चर्चा है जो मुझे (मार्च 2013) मिल सकती है जो AdBlock का उपयोग करके Chrome में इसे कैसे अवरुद्ध किया जाए, इस पर सुझाव देती है, लेकिन यह मेरे लिए काम नहीं करता है।

जवाबों:


24

कष्टप्रद "और पढ़ें" सामग्री जोड़ने वाली साइट ShareThis है।

इस बुरे व्यवहार को रोकने के लिए, आपके पास तीन अलग-अलग विकल्प हैं:

क्लिपबोर्ड घटनाओं को अक्षम करें

ये वेबसाइट क्लिपबोर्ड एपीआई का उपयोग कर रहे हैं , जो वेब डेवलपर्स को कॉपी / कट / पेस्ट क्रियाओं को रोकने और कुछ कोड निष्पादित करने की अनुमति देता है जब वे प्रदर्शन किए जाते हैं। यह है कि ShareThis (और उस जैसी अन्य वेबसाइट) कैसे काम करती है। यह बस कॉपी ईवेंट की प्रतीक्षा करता है और प्रभावी कॉपी होने से ठीक पहले यह पाठ की एक अतिरिक्त "परत" जोड़ता है जिसमें कष्टप्रद "- देखें ..." होता है।

अब सवाल यह है: क्या क्लिपबोर्ड घटनाओं को अक्षम करने के लिए किसी प्रकार की विधि है? दुर्भाग्य से, मुझे क्रोम / क्रोमियम में ऐसा करने का कोई तरीका नहीं मिल पाया है, लेकिन फ़ायरफ़ॉक्स में यह दो अलग-अलग तरीकों से संभव है।

  • अंदर जाओ about:configऔर खोजो dom.event.clipboardevents.enabled। कुंजी पर डबल क्लिक करें (इसे सेट करें false) और वॉइला! आपने क्लिपबोर्ड घटनाओं को अक्षम कर दिया है और कोई भी आपके क्लिपबोर्ड को फिर से नहीं छूएगा।
  • फ़ायरफ़ॉक्स के पुराने संस्करणों (वास्तव में, वास्तव में पुराने) के लिए, यह एक्सटेंशन है जो about:configविकल्प का सटीक समान कार्य करता है।

क्लिपबोर्ड ईवेंट को अक्षम करने से किसी भी वेबसाइट के अनुभव को नुकसान नहीं पहुंचना चाहिए क्योंकि वे शायद ही कभी उपयोग किए जाते हैं और वास्तव में उनका उपयोग करने का कोई उद्देश्य नहीं है (स्पैम के अलावा)।

चलो दूसरे समाधान के लिए सिर।

ShareThis ब्लॉक करें

यदि आपको ShareThis की आवश्यकता नहीं है, तो आप बस w.sharethis.comडोमेन को ब्लॉक कर सकते हैं । ShareThis (और पंजीकरण ClipboardEvent) को लोड करने के लिए जिम्मेदार जावास्क्रिप्ट उस वेबसाइट से भरी हुई है।

आप इसे अलग-अलग तरीकों से अवरुद्ध कर सकते हैं, जिसमें एक साधारण AdBlock फ़िल्टर से लेकर आपकी होस्ट फ़ाइल को संपादित करना शामिल है (यह मेरी प्रतिष्ठा के कारण अधिक लिंक नहीं डाल सकता है, क्योंकि मैं इसे कवर नहीं किया गया है और न ही यहां लिंक किया गया है)।

hostsफ़ाइल के माध्यम से करने का एक उदाहरण :

127.0.0.1 w.sharethis.com

तीसरा समाधान सबसे कठिन है और इसका उपयोग केवल अंतिम उपाय के रूप में किया जाना चाहिए।

समस्याग्रस्त वेबसाइटों पर चयन सुविधा को अक्षम करें

क्लिपबोर्ड पर कॉपी की गई सामग्री को संपादित करने के लिए, ये वेबसाइट Selectionएपीआई का उपयोग करती हैं जो उन्हें ऑन-द-फ्लाई के चयन को संपादित करने की अनुमति देती है। तो, एक समाधान पूरी तरह से किसी भी तरह से अक्षम करना है Selection(कोड-साइड पर, जाहिर है। आप अभी भी चयन करने में सक्षम होंगे)।

यह एक साधारण टेम्परॉन्की / ग्रीसेमोनीकी स्क्रिप्ट के साथ किया जा सकता है। मैंने इसे केवल फ़ायरफ़ॉक्स पर परीक्षण किया क्योंकि मैं अभी क्रोम स्थापित नहीं कर सकता। उसके लिए मैं क्षमा चाहता हूँ।

मूल कोड यही है:

// ==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/

मैंने इसे आपके द्वारा लिंक की गई दोनों वेबसाइटों के साथ परीक्षण किया और यह बिना किसी समस्या के काम करता है। हालाँकि, ध्यान रखें कि इससे समस्याएँ हो सकती हैं क्योंकि Selections का उपयोग पूरी तरह से वैध वेबसाइटों द्वारा किया जाता है (उदाहरण के लिए, StackExchange textboxes उनका उपयोग एक प्रतीक सम्मिलित करने के लिए करते हैं, जब आप बटन पर क्लिक करते हैं, तो अपनी कैरेट की स्थिति में), इसलिए आपको सक्षम होना चाहिए कि समस्याग्रस्त वेबसाइटों पर केवल उपयोगकर्ता नाम।

(ध्यान दें कि //यदि आपको Greasemonkey / Tampermonkey मेनू से उपयोगकर्तास्क्रिप्ट बना रहे हैं, तो वे उन पंक्तियों को हटाने की आवश्यकता हो सकती है , वे स्वचालित रूप से जोड़ देंगे)

उपयोगकर्तास्क्रिप्ट की व्याख्या बहुत सरल है। सबसे पहले, यह एक फ़ंक्शन को परिभाषित करता है जिसका नाम disableSelectionsडिफ़ॉल्ट होता है document.getSelectionऔर window.getSelectionएक के साथ कार्य करता है जो केवल एक ऑब्जेक्ट युक्त रिटर्न देता है { isCollapsed: true }। क्यूं कर? क्योंकि ShareThis (मैंने उनके जेएस कोड में चेक किया) उस फ़ंक्शन को कॉल करता है और जांचता है कि क्या isCollapsedसंपत्ति सेट है true(यदि यह है, तो यह "क्लिपबोर्ड पॉइज़निंग" को रोक देता है)। उस तरह की अन्य वेबसाइटें शायद उस चेक का प्रदर्शन नहीं करेंगी, लेकिन वे केवल एक त्रुटि के साथ समाप्त हो जाएंगी जब वे Selectionऑब्जेक्ट के कानूनी फ़ंक्शन को कॉल करने का प्रयास करेंगे ।

फिर फ़ंक्शन को बॉडी / हेडर / डॉक्यूमेंट में इंजेक्ट किया जाता है और इसे स्वचालित रूप से निष्पादित किया जाएगा। एक प्रश्न जो आप पूछ सकते हैं: यदि जावास्क्रिप्ट प्रत्येक फ़ंक्शन को ओवरराइड करने की अनुमति देता है, तो आपने addEventListenerफ़ंक्शन को कॉपी / कट / पेस्ट करने के लिए फ़ंक्शन को ओवरराइड करने के लिए क्यों नहीं ओवरराइड किया ? जवाब बहुत आसान है। एक उपयोगकर्तास्क्रिप्ट को एक गैर-आसानी से पूर्वानुमानित समय पर निष्पादित किया जाता है, इसका मतलब है कि ShareThis जावास्क्रिप्ट को उपयोगकर्तास्क्रिप्ट से पहले लोड किया जा सकता है , और यह कुछ भी नहीं करेगा। इसके बजाय, केवल window.getSelectionफ़ंक्शन को ओवरराइड करने से कोई समस्या नहीं होगी क्योंकि उस फ़ंक्शन को केवल तभी कहा जाता है जब एक कॉपी किया जाता है, और हम 100% सुनिश्चित हैं कि जब आप किसी पाठ की प्रतिलिपि बनाते हैं, तो उपयोगकर्ता नाम पहले ही लोड हो चुका है।

निष्कर्ष

सबसे अच्छा और साफ समाधान स्पष्ट रूप से पहला है, क्योंकि यह व्यावहारिक रूप से बेकार एपीआई को निष्क्रिय करता है।

दूसरा एक भी मान्य है, लेकिन आप ShareThis कार्यक्षमता में से किसी को खो देंगे।

तीसरा सबसे "हैकी" एक है, लेकिन अंतिम उपाय के रूप में यह काम कर सकता है।


आपका बहुत बहुत धन्यवाद! यह उत्कृष्ट है। यह शर्म की बात है कि यह बहुत मुश्किल है और इसका कोई सटीक समाधान नहीं है, लेकिन आपका जवाब सबसे अच्छी जानकारी है जो वर्तमान में इंटरनेट पर उपलब्ध है। आपको पुरस्कार देकर बहुत प्रसन्न हुआ।
जेस रिडेल

हाँ, मैंने काफी खोजबीन की थी क्योंकि उस समस्या का मुझ पर भी असर हो रहा था। रास्ते के लिए इनाम के लिए धन्यवाद - यह मेरे "नवागंतुक" StackExchange अनुभव में मदद करेगा!
राबर्टो

पुन :: पहले वाला, क्या यह ब्लॉक साइट्स है जहाँ आप कुछ टेक्स्ट कॉपी करने के लिए एक बटन क्लिक कर सकते हैं? जैसे, emojipedia.org/snowman । जाहिर है, फ़ायरफ़ॉक्स में, ऐसा नहीं लगता है। ठंडा। पुन: ShareThis को अवरुद्ध करते हुए, मेरा डिबगर अब उप-डोमेन "l.sharethis.com" और "ws.sharethis.com" से स्क्रिप्ट को लोड करता हुआ दिखा रहा है। इसलिए मुझे लगता है कि एकमात्र पूर्ण इलाज पूर्ण ShareThis.com डोमेन को रोक रहा है, जिसे कोई बड़ा नुकसान नहीं होना चाहिए। धन्यवाद @Robertof!
कोनराड मेयर

सावधानी: क्लिपबोर्ड ईवेंट अक्षम करने से कुछ साइटें खराबी हो सकती हैं। उदाहरण के लिए, यह डिस्कॉर्ड को खोज में चिपकाए जाने पर क्रैश करने का कारण बनता है।
निकोलस

2

Chrome पर "किल एविल" एक्सटेंशन के साथ इन संभावित क्रियाओं को अवरुद्ध किया जा सकता है:

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

(EDIT) यह एक्सटेंशन फेसबुक पर अजीब मुद्दों का कारण बनता है, इसे श्वेतसूची में सुनिश्चित करें।


अति उत्कृष्ट! मुझे इस समस्या को हल करने के लिए तीन एक्सटेंशन मिले हैं: 1. टिंट ब्लॉकर। 2. राइटटॉपी। 3. ईविल को मारना (आपको धन्यवाद, सीगल)। किल एविल वह है जिसने Phys.org पर विशेष रूप से गंदा क्लिपबोर्ड जोड़तोड़ को ठीक करने के लिए काम किया है,
डेव बर्टन

1
कोई चिंता नहीं @DaveBurton - कृपया ध्यान दें कि यह एक्सटेंशन कई साइटों को अजीब तरह से व्यवहार करने का कारण बनता है, हालांकि, इसलिए इसे केवल तब सक्षम करें जब आपको इसकी आवश्यकता हो।
सीगल

2
किल एविल एक बहिष्करण सूची या "श्वेतसूची" का समर्थन करता है, जो उन साइटों की एक सूची है जिनके लिए आप एक्सटेंशन सक्षम नहीं करना चाहते हैं (यानी, "परमिट की बुराई" सूची)। यह वही नहीं था जो मैं चाहता था: मैं केवल एक विशेष साइट (Phys.org) पर किल ईविल को सक्षम करना चाहता हूं। इसलिए मैंने इस ट्रिकी "निगेटिव लुकहेड" रेगुलर एक्सप्रेशन के साथ किल एविल को डिसएबल करने के लिए उस एक साइट को छोड़ दिया: ^ https ?: \ / \ / (?! ([A-zA-Z0-9 \ - \]] *। Phys \ .org))
डेव बर्टन

रेगेक्स का एक चुटीला सा प्यार। इसे पोस्ट करने के लिए धन्यवाद।
सीगल

1

हालाँकि यह एक फ़ायरफ़ॉक्स ऐडऑन है, लेकिन NoScript आपको एक अविश्वसनीय सूची सेट करके किसी भी वेबसाइट से जावास्क्रिप्ट को ब्लॉक करने की अनुमति देता है।


2
उत्तर के लिए धन्यवाद, लेकिन यह वह नहीं है जिसकी मुझे आवश्यकता है। (मुझे साइट पर हर जगह जावास्क्रिप्ट को तोड़ने वाला कुछ नहीं चाहिए।) मैं इस प्रश्न को अधिक विशिष्ट होने के लिए संपादित करूंगा।
जेस रिडेल

1

यदि आप प्रदर्शित होने से पहले स्वचालित रूप से HTML को संशोधित करने का एक तरीका खोज रहे हैं, तो Greasemonkey उपकरण है, और आपको एक उपयोगकर्ता-स्क्रिप्ट बनाने की आवश्यकता होगी जो संशोधन करती है।

Google Chrome में Greasemonkey लिपियों के लिए शुरुआती लेख से :

Chrome अब मूल रूप से उपयोगकर्ता स्क्रिप्ट का समर्थन करता है। आपको उनका उपयोग करने के लिए एक अतिरिक्त एक्सटेंशन स्थापित करने की आवश्यकता नहीं है; वास्तव में, क्रोम प्रत्येक उपयोगकर्ता स्क्रिप्ट को एक व्यक्तिगत एडऑन के रूप में मानता है ताकि आप उन्हें आसानी से प्रबंधित और निकाल सकें।

Greasemonkey के बारे में बहुत सारी जानकारी इंटरनेट पर पाई जाती है, जिसमें कई ट्यूटोरियल भी शामिल हैं। उनमें से ज्यादातर फायरफॉक्स के लिए होंगे, जहां ग्रीसेमेक की उत्पत्ति हुई, लेकिन वे आज क्रोम पर भी लागू होते हैं।

जैसा कि "और पढ़ें" के लिए जिम्मेदार साइट है sharethis.com। यदि आप इसे ब्लॉक करते हैं, तो यह बंद हो जाना चाहिए। यदि आपके पास एक स्थापित सुरक्षा सूट है, तो इसका उपयोग साइट को अवरुद्ध करने के लिए करें। अन्यथा आप इसे अपने होस्ट्स फ़ाइल का उपयोग करके ब्लॉक कर सकते हैं ।

sharethis.comवह प्रदाता है जो आपके द्वारा मुझे दी गई दो वेबसाइटों को टिंट की आपूर्ति करता है। Tynt एक वेबसाइट के बजाय एक प्रौद्योगिकी प्रतीत होती है, इसलिए निश्चित रूप से ऐसे अन्य प्रदाता हो सकते हैं, लेकिन किसी को आशा है कि वे दुर्लभ होंगे।


ठीक है धन्यवाद। सिद्धांत रूप में, बस एक वेबसाइट पर कुछ के बारे में तय किया जा सकता है अगर कोई एक greasemonkey स्क्रिप्ट लागू करता है। (कम से कम, मुझे लगता है कि किसी भी जावास्क्रिप्ट समस्या को अधिक जावास्क्रिप्ट द्वारा तय किया जा सकता है।) इनाम के लिए इस उत्तर को स्वीकार करने के लिए, मुझे इसे लागू करने के तरीके के बारे में बहुत अधिक जानकारी की आवश्यकता होगी।
जेस रिडेल

किस तरह की जानकारी? एक विकिपीडिया के साथ शुरू हो सकता है जो विकी और userscripts.org सहित सबसे महत्वपूर्ण लिंक देता है ।
हरमिस्क

कहो, गैर-टायंट कार्यान्वयन कैसे काम करते हैं और उनके बारे में वास्तव में क्या किया जाएगा? अब तक आपने जो कुछ भी नहीं लिखा है, वह इस कॉपी-पेस्ट समस्या (जावास्क्रिप्ट के बजाय सामान्य रूप से) के लिए भी विशिष्ट है।
जेस रिडेल

मैं Tynt से कभी नहीं मिला (कोई आश्चर्य नहीं कि जब से मैं NoScript का उपयोग करता हूं)। आपके द्वारा लिंक किए गए लेख में दो उदाहरण वेबसाइटों से, एक गायब हो गया है और दूसरा Tynt का उपयोग नहीं करता है। आपके पास कोई उदाहरण है?
हरमिस्क

मैंने दो उदाहरण वेबसाइटों को जोड़ने के लिए एक संपादन किया है जो एक टिंट-अवरोधक एक्सटेंशन का उपयोग करते हुए भी इस व्यवहार को जारी रखते हैं।
जेस रिडेल

1

क्रोमियम पर मुझे निरपेक्ष सक्षम राइट क्लिक और कॉपी एक्सटेंशन के साथ सफलता मिली ।

इसे स्थापित करने के बाद, आप उन साइटों की उपयोगकर्ता सूची जोड़ सकते हैं, जहां प्राथमिकताएं प्राथमिकता में सक्षम हैं। या, जब आप किसी विशेष पृष्ठ पर होते हैं और देखते हैं कि यह आपके क्लिपबोर्ड के साथ टैंपर करता है, तो आप इस विस्तार को इसके टूलबार बटन के माध्यम से सक्षम कर सकते हैं (यह स्वचालित रूप से आपकी सूची में साइट जोड़ता है)।


0

वैकल्पिक रूप से, क्रोम के लिए "कॉपी के रूप में सादा पाठ" विस्तार का उपयोग करें। फिर आपके पास सामान्य कॉपी के अलावा मेनू में एक अतिरिक्त विकल्प है। इसका उल्टा है कि यह क्रोम में काम करता है और कुछ भी नहीं तोड़ता है। https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog


नाम से, आपको लगता होगा कि यह स्वरूपित पाठ की प्रतिलिपि बनाता है? यह कभी-कभी कुछ लोगों के लिए उपयोगी होता है।
कॉनरेड मेयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.