右クリック禁止・選択禁止・コピー禁止を禁止する
ブラウザの開発者ツールを開き、コンソールに次のコードをコピーして 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 に強制的に設定する