「続きを読む:www.site.com」に、Tynt以外のJavaScriptがコピーアンドペーストアクションに挿入されるのを防ぐにはどうすればよいですか?


30

ブラウザでテキストをコピーすると、クリップボードに「もっと読む:www.site.com」のようなものを挿入するサイトがたくさんあります。これはひどいものです。Google検索では、WebサイトがたまたまTyntサービスを使用している場合(Tyntドメインをブロックすることにより)、これを停止するいくつかの 方法が明らかになっていますが、多くのWebサイトは自家製のJavaScriptを使用しています。

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

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

EDIT#2:ここではTyntブロッカーの私の使用にもかかわらず、私に嫌がらせをし続ける2例のウェブサイトです:限界革命 | フィスカルタイムズ

ここでは、2つのStackOverflowの 質問と、Tyntを使用せずにこの日陰の練習を手動で実装する方法を説明する2つのブログ 投稿を示します。ここに、これが確実にブロックすることがいかに難しいかを説明するブログ投稿があります。AdBlockを使用してChromeでこれをブロックする方法に関する提案を提供する最新のディスカッション(2013年3月)を次に示しますが、うまくいきませんでした。

回答:


24

迷惑な「もっと読む」ものを追加するサイトは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サイトはSelectionAPIを使用して、オンザフライで選択を編集できるようにします。したがって、解決策は、あらゆる種類を完全に無効にすることです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.getSelectionwindow.getSelection関数を、を含むオブジェクトを単に返すものに置き換えます{ isCollapsed: true }。どうして?ShareThis(私はJSコードでチェックしました)がその関数を呼び出し、isCollapsedプロパティが設定されているかどうかをチェックするためtrue(設定されている場合は、「クリップボードポイズニング」を停止します)。そのような他のWebサイトは、おそらくそのチェックを実行しませんが、Selectionオブジェクトの正当な関数を呼び出そうとすると、単にエラーが発生します。

次に、関数がbody / header / documentに挿入され、自動的に実行されます。あなたが尋ねることができる質問は次のとおりです:Javascriptが(ほぼ)すべての関数をオーバーライドできるaddEventListener場合、イベントがコピー/カット/貼り付けのときに単純に何もしないように関数をオーバーライドしないのはなぜですか?答えは非常に簡単です。ユーザースクリプトは予測不可能な時間に実行されます。つまり、ShareThis Javascriptはユーザースクリプトのにロードでき、何もしません。代わりに、window.getSelection関数をオーバーライドするだけで問題はありません。その関数はコピーが実行されたときにのみ呼び出され、テキストをコピーするときにユーザースクリプトが既に読み込まれていることを100%確信しています。

結論

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

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

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


どうもありがとうございました!これは素晴らしいです。これは非常に難しく、完璧な解決策がないことは残念ですが、あなたの答えは、現在インターネット上で入手可能な最高の情報であるようです。あなたに賞金を授与することを非常に嬉しく思います。
ジェスリーデル14年

ええ、その問題も私に影響を与えていたので、かなりの研究をしました。ところで賞金をありがとう-これは私の「新人」StackExchangeの経験に役立ちます!
ロバートオブ14年

再:最初のものは、ボタンをクリックしてテキストをコピーできるサイトをブロックしますか?たとえば、emojipedia.org/snowman。経験的に、Firefoxではそうではないようです。クール。Re:ShareThisをブロックすると、デバッガーはサブドメイン "l.sharethis.com"および "ws.sharethis.com"から読み込まれるスクリプトを表示します。したがって、完全な解決策は、ShareThis.comドメイン全体をブロックすることだけだと思いますが、大きな損失はありません。ありがとう@Robertof!
コンラッドマイヤー

注意:クリップボードイベントを無効にすると、一部のサイトが誤動作する可能性があります。たとえば、検索に貼り付けるとDiscordがクラッシュします。
ニコラス

2

これらの不快なアクションは、「Kill​​ Evil」拡張機能を使用してChromeでブロックできます。

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

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


優れた!この問題を解決するための3つの拡張機能を見つけました。1. Tynt Blocker。2. RightToCopy。3.悪を殺します(ありがとう、カモメ)。キル悪は、phys.orgで特に厄介なクリップボード操作を修正するために働いていたものです
デイブ・バートン

1
@DaveBurtonの心配はありません。ただし、この拡張機能により、多くのサイトがかなり奇妙な動作をすることに注意してください。必要な場合にのみ有効にしてください。
シーガル

2
Kill Evilは、除外リストまたは「ホワイトリスト」をサポートしています。これは、拡張機能を有効にしたくないサイトのリスト(「悪を許可」リスト)です。それは私が望んでいたことではありませんでした。特定のサイト(phys.org)でのみKill Evilを有効にしたいだけです。そのため、私は次のトリッキーな「ネガティブな先読み」正規表現になり、その1つのサイトを除いてKill Evilを無効にしました:^ https?:\ / \ /(?!([a-zA-Z0-9 \-\。] * phys \ .org))
デイブバートン

生意気な正規表現が大好きです。投稿してくれてありがとう。
シーガル

1

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


2
答えてくれてありがとう、しかしこれは私が必要なものではありません。(サイトのどこでもJavaScriptを壊さないものが必要です。)質問をより具体的に編集します。
ジェスリーデル14年

1

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

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

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

Greasemonkeyについては、多くのチュートリアルなど、インターネット上で多くの情報を見つけることができます。それらのほとんどは、Greasemonkeyが生まれたFirefox用ですが、今日ではChromeにも適用されます。

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

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


はい、ありがとう。原則として、greasemonkeyスクリプトを適用すると、Webサイト上のほぼすべてのものを修正できます。(少なくとも、JavaScriptの問題はより多くのJavaScriptで修正できると思います。)賞金のためにこの答えを受け入れるには、それを実装する方法についてもっと多くの情報が必要です。
ジェスリーデル14年

どんな情報?wikiuserscripts.orgを含む最も重要なリンクを提供するウィキペディアから始めることができます
harrymc

Tynt以外の実装がどのように機能し、それらについて正確に何が行われるのかという説明はありますか?これまでのところ、このコピーアンドペーストの問題に特化したものは何もありません(JavaScript全般ではありません)。
ジェスリーデル14年

私はTyntに会ったことがありません(NoScriptを使用しているので不思議ではありません)。リンク先の記事の2つのサンプルWebサイトから、1つは表示されなくなり、もう1つはTyntを使用しなくなりました。例はありますか?
harrymc 14年

Tyntブロッキング拡張機能を使用している場合でもこの動作を継続する2つのサンプルWebサイトを追加するように編集しました。
ジェスリーデル14年

1

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

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


0

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


名前から、フォーマットされたテキストのコピーが壊れると思いますか?これは、一部の人にとって便利な場合があります。
コンラッドマイヤー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.