📖

右クリックやテキスト選択禁止を回避してコピーする方法

2021/03/25に公開約2,700字3件のコメント

Abstract

メモをするため、画面右クリックしたがコピーできないことや、文字選択できずわざわざキーボードで入力することたまにあります。
ブックマークレット用意して使っていたこともありましたが、面倒なのでメモを諦めることもありました。
しかし、FirefoxのGreasemonkeyというアドオンを使えば、開くページ全てにJavaScriptを実行できること知り、作ってみました。
また、standard softwareさんより、ChromeにはScriptAutoRunnerがあると教えて頂いたため、ScriptAutoRunner用スクリプトも作ってみました。

JavaScript

Greasemonkey Script

// ==UserScript==
// @name     ImproveUsability
// @version  0.0.1
// @grant    none
// @require  https://code.jquery.com/jquery-3.6.0.slim.min.js
// ==/UserScript==

(function () {
  function improve(number) {
    $("body").css("-moz-user-select", "text");
    $("body").css("-khtml-user-drag", "auto");
    $("body").css("-webkit-user-select", "auto");
    $("body").css("-ms-user-select", "text");
    $("body").css("user-select", "text");
    document.addEventListener("contextmenu", (e) => e.stopPropagation(), true);
    document.addEventListener("copy", (e) => e.stopPropagation(), true);
    document.addEventListener("cut", (e) => e.stopPropagation(), true);
    document.addEventListener("paste", (e) => e.stopPropagation(), true);
    document.addEventListener("selectstart", (e) => e.stopPropagation(), true);
  }
  improve();
})();

ScriptAutoRunner Script

Greasemonkeyにおける@requireに相当するものが見つからなかったため、JavaScript上でJqueryのCDNを読み込み。

let head = document.getElementsByTagName("head");
let script = document.createElement("script");
script.setAttribute("src", "https://code.jquery.com/jquery-3.6.0.slim.min.js");
script.setAttribute("type", "text/javascript");
script.addEventListener("load", () => {
  $("body").css("-moz-user-select", "text");
  $("body").css("-khtml-user-drag", "auto");
  $("body").css("-webkit-user-select", "auto");
  $("body").css("-ms-user-select", "text");
  $("body").css("user-select", "text");
  document.addEventListener("contextmenu", (e) => e.stopPropagation(), true);
  document.addEventListener("copy", (e) => e.stopPropagation(), true);
  document.addEventListener("cut", (e) => e.stopPropagation(), true);
  document.addEventListener("paste", (e) => e.stopPropagation(), true);
  document.addEventListener("selectstart", (e) => e.stopPropagation(), true);
});
document.head.appendChild(script);

課題

上記Scriptの課題

以下メソッドで、右クリック抑制回避に有用なメソッドを使ったかどうかバレるので、しっかり対策されているサイトだと、右クリックできないことがある😿

  • isPropagationStopped
    • stopPropagation()を使ったことがバレる

ハッキング ラボのつくりかた 仮想環境におけるハッカー体験学習

Discussion

Chromeだとこんなのあります。便利っす。

Amazonの商品ページから、「人気のインディーズマンガ」を消したい(chrome) - Qiita

https://qiita.com/iteyan/items/78bcad46ae43616eeb0f

コメントありがとうございます。
ChromeにもGreasemonkeyに似たアドオンがあるの知りませんでした。
早速、ScriptAutoRunner用のコードを追記してみました。

Greasemonkeyが発祥のuserscriptですが、動かすための拡張機能はいくつかあります。
おそらく今最も使われているのはTampermonkeyでChrome, Firefox, Safari, Operaなどメジャーどころに対応しています
オープンソースなものだとViolentmonkeyなどあります。こちらも多くのブラウザに対応しています。

また、Greasy Forkといったuserscriptを共有するためのサービスもあります。

ログインするとコメントできます