迷惑な「もっと読む」ものを追加するサイトはShareThisです。
この悪い動作を防ぐには、3つの異なる選択肢があります。
クリップボードイベントを無効にします
これらのWebサイトはClipboard APIを使用しています。これにより、Web開発者はコピー/カット/ペーストアクションをインターセプトし、実行時にコードを実行できます。これがShareThis(およびそのような他のWebサイト)の仕組みです。単純にコピーイベントを待機し、効果的なコピーが実行される直前に、迷惑な「-See ...」を含むテキストの「レイヤー」を追加します。
質問は次のとおりです。クリップボードイベントを無効にする方法はありますか?残念ながら、Chrome / Chromiumでこれを行う方法を見つけることができませんでしたが、Firefoxでは2つの異なる方法で可能です。
- に移動し
about:config
て検索しdom.event.clipboardevents.enabled
ます。キーをダブルクリックして(に設定false
)、出来上がり!クリップボードイベントを無効にしたため、クリップボードに再び触れることはありません。
- Firefoxの古いバージョン(本当に古いバージョン)には、オプションとまったく同じことを行うこの拡張機能があり
about:config
ます。
クリップボードイベントを無効にしても、ほとんど使用されず、実際に使用する目的(スパム以外)がないため、Webサイトのエクスペリエンスが損なわれることはありません。
2番目のソリューションに向かいましょう。
ShareThisをブロック
ShareThisが不要な場合は、単にw.sharethis.com
ドメインをブロックできます。ShareThisのロード(およびの登録ClipboardEvent
)を行うJavascript は、そのWebサイトからロードされます。
単純なAdBlockフィルターからhostsファイルの編集に至るまで、さまざまな方法でブロックできます(評判によりリンクを追加できないため、ここではカバーもリンクもされていません)。
hosts
ファイルを介してそれを行う例:
127.0.0.1 w.sharethis.com
3番目のソリューションは最も難しいものであり、最後の手段としてのみ使用する必要があります。
問題のあるWebサイトで選択機能を無効にします
クリップボードにコピーされたコンテンツを編集するために、これらのWebサイトはSelection
APIを使用して、オンザフライで選択を編集できるようにします。したがって、解決策は、あらゆる種類を完全に無効にすることですSelection
(コード側では、明らかに。選択を実行できます)。
これは、簡単なTampermonkey / Greasemonkeyスクリプトを使用して実行できます。現在Chromeをインストールできないため、Firefoxでのみテストしました。ごめんなさい
これはソースコードです:
// ==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
ディレクティブを調整する必要があります。1行に1つのWebサイトを配置でき@include http://bad.website.address/
ます。
リンクした両方のWebサイトでテストしましたが、問題なく動作します。ただし、これはSelection
完全に合法的なWebサイトで使用されるため、これにより問題が発生する可能性があることに注意してください(たとえば、StackExchangeテキストボックスは、ボタンをクリックしてキャレットの位置にシンボルを挿入するために使用します)。問題のあるウェブサイトでのみそのユーザースクリプト。
(//
Greasemonkey / Tampermonkeyメニューからユーザースクリプトを作成している場合は、行を削除する必要がある場合があることに注意してください。自動的に追加されます)
ユーザースクリプトの説明は非常に簡単です。最初に、という名前の関数を定義します。disableSelections
この関数は、デフォルトdocument.getSelection
とwindow.getSelection
関数を、を含むオブジェクトを単に返すものに置き換えます{ isCollapsed: true }
。どうして?ShareThis(私はJSコードでチェックしました)がその関数を呼び出し、isCollapsed
プロパティが設定されているかどうかをチェックするためtrue
(設定されている場合は、「クリップボードポイズニング」を停止します)。そのような他のWebサイトは、おそらくそのチェックを実行しませんが、Selection
オブジェクトの正当な関数を呼び出そうとすると、単にエラーが発生します。
次に、関数がbody / header / documentに挿入され、自動的に実行されます。あなたが尋ねることができる質問は次のとおりです:Javascriptが(ほぼ)すべての関数をオーバーライドできるaddEventListener
場合、イベントがコピー/カット/貼り付けのときに単純に何もしないように関数をオーバーライドしないのはなぜですか?答えは非常に簡単です。ユーザースクリプトは予測不可能な時間に実行されます。つまり、ShareThis Javascriptはユーザースクリプトの前にロードでき、何もしません。代わりに、window.getSelection
関数をオーバーライドするだけで問題はありません。その関数はコピーが実行されたときにのみ呼び出され、テキストをコピーするときにユーザースクリプトが既に読み込まれていることを100%確信しています。
結論
実用的ではないAPIを無効にするため、最適かつクリーンなソリューションが明らかに最初のソリューションです。
2番目のものも有効ですが、ShareThis機能は失われます。
3番目は最も「ハッキング」なものですが、最後の手段としては機能します。