右クリック禁止・選択禁止・コピー禁止を禁止する

ブラウザの開発者ツールを開き、コンソールに次のコードをコピーして enter。

((es, ms, c) => es.map(e => ms.map(m => e["on" + m] = c, e.style.userSelect = "auto")))([document.body, document.documentElement], ["contextmenu", "selectstart", "copy"], e => e.stopPropagation())

これでほとんどの contextmenu, selectstart, copy イベントを無効化しているコードを無効化できる。

2019-09-27追記: ブックマークレットをビルドする仕組みを作った


ブックマークレット

ブックマークを作成し URL を次のように設定するとボタン一つで使用できる。

javascript:void ((es, ms, c) => es.map(e => ms.map(m => e["on" + m] = c, e.style.userSelect = "auto")))([document.body, document.documentElement], ["contextmenu", "selectstart", "copy"], e => e.stopPropagation())

解説

コードを読みやすく書き直すと次のようになる。

const elements = [
	document.body, // <body>
	document.documentElement, // <html>
];

const events = [
	"contextmenu",
	"selectstart",
	"copy",
];

const stopEvent = e => e.stopPropagation();

elements.forEach(elem => {
	events.forEach(eventType => {
		// 1.
		elem["on" + eventType] = stopEvent;
		// 2.
		elem.style.userSelect = "auto";
	});
});

1. body, html 要素について contextmenu, selectstart, copy イベントを新たに追加し、発生したイベントがページで設定されている他のイベントハンドラに伝播しないように (stopPropagation) する
2. body, html 要素について CSS の user-select プロパティの値を auto に強制的に設定する