2

keyup/mouseupを聞いてwindow.getSelection(). 何か案は?

編集: 実際、私がやろうとしているのは、ユーザーが contentDocument 内のテキストをまったく選択できないようにすることです。これを達成するものも問題ありません。(選択イベントを取得する背後にあるアイデアは、単に to preventDefault()or otherでしたgetSelection().removeAllRanges())

edit2:強調表示が表示されないようにするだけでなく、選択が行われないようにする必要があることに注意してください。

edit3: コピーを防止する必要はありませんが、要素を選択します。

4

6 に答える 6

4

次のスクリプトを本文に入れると、Firefox で選択が無効になります。

<script type="text/javascript">
   document.body.style.MozUserSelect = "none";
   document.body.style.cursor = "default";
</script>

ハイライトを無効にするだけでなく、選択自体も無効にします。マウスまたは矢印キー ( を押しながら位置をクリックして矢印キーで移動) で領域を選択しようとして、SHIFTを押しSTRG+Cても何も起こりません。

その変更後に機能する唯一STRG+Aの選択は (選択は表示されませんが、STRG+A&STRG+Cはすべてをコピーします)。キーボードイベントによってそれを回避することは可能かもしれません。


編集: Mozilla Doc Centerへのリンクでコメントしているのを見ました。彼らがそれを書いている間、外観のみを制御しますが、Firefox 3.6 でのすべてのテストは、外観だけでなく選択にも影響することを示しています。ただし、将来のリリースで変更される可能性があります...

于 2011-03-22T11:50:11.553 に答える
3

selectandなどの適切なイベントがない場合(イベントはありますが、フォームコントロールにのみ適用されるselectstartFirefox には実際にはありません)、質問で提案したように、マウスとキーボードのイベントを使用することしかできません。selectドキュメント内のすべてのイベントの既定のアクションを防止するmousedownことは、リンクやフォーム要素などのすべてのインタラクティブな要素が機能しなくなるため、適切ではありません。代わりに、マウスとキーボードを使用して行われた選択をザッピングする次のようなことを行うことができます。

ただし、Firefox ではそれらを検出する方法がまったくないため、コンテキスト メニューと編集メニューの [すべて選択] による選択を妨げることはありません。これに対処する必要がある場合は、選択をポーリングすることが唯一の希望です。

function killSelection() {
    window.getSelection().removeAllRanges();
}

document.addEventListener("mousedown", function(evt) {
    document.addEventListener("mousemove", killSelection, false);
}, false);

document.addEventListener("mouseup", function(evt) {
    document.removeEventListener("mousemove", killSelection, false);
}, false);

document.addEventListener("keydown", killSelection, false);

window.addEventListener("blur", function(evt) {
    document.removeEventListener("mousemove", killSelection, false);
}, false);
于 2011-03-23T11:21:07.037 に答える
2

cssを使用できます

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
于 2011-06-17T07:38:59.553 に答える
1

CSSを使用して、ユーザーがテキストを選択しないようにすることができます。ここで私の答えを参照してください:CSSを使用してテキスト選択の強調表示を無効にする方法は?

FirefoxでJavaScriptを介してこれを設定するには、次のようにします。

document.body.style.MozUserSelect = "-moz-none";
于 2011-03-06T16:02:50.700 に答える
1

コピー コマンドは、イベントによって有効化および無効化されます。コマンド アップデーターを作成することで、このイベントの通知を受け取ることができます。

<commandset commandupdater="true" events="select"
            oncommandupdate="setTimeout(selectNone, 0);"/>
于 2011-03-09T00:49:22.370 に答える
0

次のコードを css ファイルに追加します。このファイルは<link>、ポップアップ html のタグにリンクされています。

*,
*::before,
*::after {
  user-select: inherit;
}

body {
  user-select: none;
}
于 2021-08-18T13:04:36.400 に答える