web-dev-qa-db-ja.com

「続きを読む:www.site.com」がTynt以外のJavaScriptでコピー/貼り付けアクションに挿入されないようにするにはどうすればよいですか?

ブラウザでテキストをコピーすると、クリップボードに「続きを読む:www.site.com」のようなものを挿入するサイトがたくさんあります。私はこれを忌まわしいと思います。グーグル検索は somemethods を明らかにし、ウェブサイトが偶然にサービスを使用している場合これを停止する Tynt (単にTyntドメインをブロックすることにより)、しかし多くのウェブサイトは自社開発のJavaScriptを使用しています。

JavaScriptをオフにする以外に、この動作をブロックする一般的な方法はありますか? Chrome=を使用していますが、すべてのソリューションに興味があります。

編集:明確にするために、私はこれらのウェブサイトの残りのJavaScript機能を維持できるようにしたいと考えています。

編集#2:Tyntブロッカーを使用しているにもかかわらず、私に嫌がらせを続ける2つのウェブサイトの例を次に示します。 Marginal Revolution | フィスカルタイムズ

2つ StackOverflowquestions と2つの blogposts は、Tyntを使用せずにこの怪しげな慣習を手動で実装する方法を説明しています。これが ブログ投稿 であり、確実にブロックすることがどれほど難しいかを説明しています。これが 最新のディスカッション 見つかりました(2013年3月)で、これをブロックする方法に関する提案がChrome AdBlockを使用して提供されていますが、私にとってはうまくいきませんでした) 。

30
Jess Riedel

迷惑な「続きを読む」ものを追加しているサイトは、ShareThisです。

この不正な動作を防ぐには、3つの異なる方法があります。

クリップボードイベントを無効にする

これらのWebサイトは Clipboard APIs を使用しています。これにより、Web開発者はコピー/カット/貼り付けアクションをインターセプトし、実行時にコードを実行できます。これがShareThis(およびそのような他のWebサイト)の動作方法です。それは単にコピーイベントを待機し、有効なコピーが実行される直前に、迷惑な「-See ...」を含むテキストの「レイヤー」を追加します。

さて、問題は、クリップボードイベントを無効にする方法はありますか?残念ながら、私はChrome/Chromiumでこれを行う方法を見つけることができませんでしたが、Firefoxでは2つの方法で可能です。

  • about:configにアクセスして、dom.event.clipboardevents.enabledを検索します。キーをダブルクリック(falseに設定)してください。クリップボードイベントを無効にしたため、クリップボードに再び触れることはありません。
  • 古いバージョンのFirefox(実際には非常に古いバージョン)の場合、 this extension があり、about:configオプションとまったく同じことを行います。

クリップボードイベントを使用してもめったに使用されず、それらを使用する目的(スパム以外)がないため、クリップボードイベントを無効にしても、Webサイトのエクスペリエンスが損なわれることはありません。

2番目のソリューションに移りましょう。

ShareThisをブロック

ShareThisが必要ない場合は、w.sharethis.comドメインをブロックするだけです。 ShareThisのロード(およびClipboardEventの登録)を行うJavascriptは、そのWebサイトからロードされます。

単純なAdBlockフィルターからホストファイルの編集に至るまで、さまざまな方法でブロックすることができます(評判のため、これ以上リンクを張ることができないため、これはここではカバーもリンクもされていません)。

hostsファイルを使用してこれを行う例:

127.0.0.1 w.sharethis.com

3番目のソリューションは最も難しいものであり、最後の手段としてのみ使用する必要があります。

問題のあるWebサイトの選択機能を無効にする

クリップボードにコピーされたコンテンツを編集するために、これらのWebサイトはSelection AP​​Iを使用して、選択内容をオンザフライで編集できるようにします。したがって、解決策は、完全にあらゆる種類の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サイトでテストしましたが、問題なく動作しました。ただし、Selectionsは完全に正当なWebサイトで使用されるため、これにより問題が発生する可能性があることに注意してください(たとえば、StackExchangeテキストボックスは、ボタンをクリックすると、キャレットの位置にシンボルを挿入するためにそれらを使用します)。なので、問題のあるWebサイトでのみそのユーザースクリプトを有効にする必要があります。

(Greasemonkey/Tampermonkeyメニューからユーザースクリプトを作成している場合、//で始まる行を削除する必要がある場合があることに注意してください。自動的に追加されます)

ユーザースクリプトの説明はかなり単純です。まず、デフォルトのdocument.getSelection関数とwindow.getSelection関数を、{ isCollapsed: true }を含むオブジェクトを返すだけの関数に置き換えるdisableSelectionsという名前の関数を定義します。どうして? ShareThis(私はJSコードでチェックしました)がその関数を呼び出し、isCollapsedプロパティがtrueに設定されているかどうかをチェックします(設定されている場合、「クリップボードポイズニング」を停止します)。そのような他のWebサイトはそのチェックを実行しない可能性がありますが、Selectionオブジェクトの正当な関数を呼び出そうとすると、エラーが発生するだけです。

次に、関数は本体/ヘッダー/ドキュメントに挿入され、自動的に実行されます。あなたが尋ねることのできる質問は、JavaScriptが(ほぼ)すべての関数をオーバーライドすることを許可している場合、イベントがコピー/切り取り/貼り付けのときにaddEventListener関数をオーバーライドして何もしないのはなぜですか?答えはかなり簡単です。ユーザースクリプトが予測不可能な時間に実行されます。これは、ShareThis Javascriptがユーザースクリプトをbeforeの前にロードでき、それが実行されないことを意味します何でも。代わりに、window.getSelection関数をオーバーライドするだけで、コピーが実行されたときにその関数がonlyで呼び出されるため、問題は発生しません。私たちはあなたがテキストをコピーするとき、ユーザースクリプトがすでにロードされていることを100%確信しています。

結論

実用的で役に立たないAPIを無効にするため、最善かつ最もクリーンなソリューションは明らかに最初のものです。

2番目のものも有効ですが、ShareThis機能は失われます。

3つ目は最も「ハッキー」なものですが、最後の手段として機能します。

24
Robertof

これらのいやらしい行動は、Chromeで "Kill Evil"拡張機能を使用してブロックできます。

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

(編集)この拡張機能はFacebookで奇妙な問題を引き起こすようです。必ずホワイトリストに登録してください。

2
seagull

HTMLを表示する前に自動的に変更する方法を探している場合は、Greasemonkeyがツールであり、変更を行うユーザースクリプトを作成する必要があります。

記事から Google ChromeのGreasemonkeyスクリプトの初心者向けガイド

Chromeはユーザースクリプトをネイティブでサポートするようになりました。それらを使用するために追加の拡張機能をインストールする必要はありません。実際、Chromeは各ユーザースクリプトを個別のアドオンとして扱うため、簡単に管理および削除できます。

多くのチュートリアルを含め、Greasemonkeyに関する情報はインターネット上に多数あります。それらのほとんどは、Greasemonkeyが開発されたFirefox用ですが、現在Chromeにも適用されています。

「もっと読む」を担当するサイトはsharethis.com。それをブロックすると、これは停止するはずです。インストールされているセキュリティスイートがある場合は、それを使用してサイトをブロックします。それ以外の場合は、 hostsファイルを使用してブロック できます。

sharethis.comは、あなたが私に提供した2つのWebサイトにTyntを提供するプロバイダーです。 Tyntはウェブサイトというよりテクノロジーのように見えるので、もちろん他のそのようなプロバイダーがいるかもしれませんが、それらがかなりまれであることを期待する必要があります。

1
harrymc

これはFirefoxのアドオンですが、 NoScript を使用すると、信頼できないリストを設定して、任意のWebサイトからのJavaScriptをブロックできます。

1
nonterrorist

Chromiumで Absolute Enable Right Click&Copy 拡張で成功しました。

インストールしたら、設定で拡張機能が有効になっているサイトのユーザーリストを追加できます。または、特定のページでクリップボードが改ざんされていることがわかった場合は、ツールバーボタンを使用してこの拡張機能をオンザフライで有効にできます(これにより、サイトが自動的にリストに追加されます)。

1
Ruslan

または、Chromeの「プレーンテキストとしてコピー」拡張機能を使用します。メニューには、通常のコピーの他に追加のオプションがあります。 Chromeで動作し、何も壊さないという利点があります。 https://chrome.google.com/webstore/detail/copy-as-plain-text -amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source = chrome-app-launcher-info-dialog

0
Julian