コンテキスト メニューはブラウザーによって管理され、コピー (切り取りと貼り付けと共に) コマンドを追加するかどうかを決定します。これは、ユーザー選択でコンテキスト メニューが開いている場合にのみ発生します。
イベントのリスナーを追加できcontextmenu
ます。これはキャンセルできるため、カスタム コンテキスト メニューを作成できます。これは非常に優れていますが、Flash などの高度な技術を使用しないとクリップボードにアクセスできません。
ただし、使用できる(汚い)トリックがあります。しかし、<textarea>
とにかくトリックはトリックです。次のようにスタイルします。
textarea {
position: absolute;
margin: 0;
padding: 0;
border: 0 none;
opacity: 0;
}
これで、イベントのイベント リスナーを追加できますcontextmenu
。
var textarea = document.getElementsByTagName("TEXTAREA")[0];
document.addEventListener("contextmenu", function(e) {
textarea.style.zIndex = 10000; // must be high enough
textarea.style.left = e.pageX + "px";
textarea.style.top = e.pageY + "px";
textarea.setSelectionRange(0, textarea.value.length);
setTimeout(function() {
textarea.style.zIndex = -10000; // must be low enough
}, 10);
});
ここで行うことは、テキストエリアをカーソルのすぐ下に配置し、そのコンテンツ全体を選択して、カーソルが実際に選択範囲にくるようにすることです。
textarea は他のすべての要素の上にある必要があるため、そのz-index
スタイル プロパティを高い値に設定する必要があります。ただし、ページに「ゴースト」が浮かんでいて、予想されるマウスの動作が妨げられる可能性があるため、他のすべての要素の背後にプッシュした直後に (したがってsetTimeout
) 、
そこでは、コンテキスト メニューに作業用のコピーがあります。
申し訳ありませんが、Chrome でのみテストしました。私が推測する他のブラウザーでも動作するはずです。テストするだけで済みます。IE8 以下 (の代わりに使用し、テキストを選択する方法がまったく異なる - チェックアウト) では動作せず、IE8 では動作しません(イベントリスナーを設定すると常にコンテキストメニューが表示されなくなります - する必要があります)。イベントを使用し、右クリックをチェックします)。attachEvent
addEventListener
contextmenu
mousedown
警告: ユーザーがクリックする場所によっては、テキスト領域がページの下部と右側の境界からはみ出し、ページ スクロールバーが表示される場合があります。テキストエリアのサイズを幅 1 ピクセル、高さ 1 ピクセルに変更し、overflow: hidden
.
まあ、この答えは私自身にも非常に有益でした。気に入っていただけると幸いです。
編集:ライブテスト