📖
右クリックやテキスト選択禁止を回避してコピーする方法
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
コメントありがとうございます。
ChromeにもGreasemonkeyに似たアドオンがあるの知りませんでした。
早速、ScriptAutoRunner用のコードを追記してみました。
Greasemonkeyが発祥のuserscriptですが、動かすための拡張機能はいくつかあります。
おそらく今最も使われているのはTampermonkeyでChrome, Firefox, Safari, Operaなどメジャーどころに対応しています
オープンソースなものだとViolentmonkeyなどあります。こちらも多くのブラウザに対応しています。
また、Greasy Forkといったuserscriptを共有するためのサービスもあります。