javascript:テキスト選択を無効にする


84

私はJavaScriptを使用してWebisteでのテキスト選択を無効にしています。

コードは次のとおりです。

<script type="text/JavaScript">

function disableselect(e) {
  return false
}

function reEnable() {
  return true
}

document.onselectstart = new Function ("return false")

if (window.sidebar) {
  document.onmousedown = disableselect
  document.onclick = reEnable
}
</script>

同様のスクリプトはここにあります

私のローカルホスト:すべてのブラウザー(Firefox、Chrome、IE、Safari)はうまく機能します。

私のライブサイト: Firefoxを除いてすべてOK。

私の質問は次のとおりです。

  1. Firefoxがライブサイトとローカルホストで異なる動作をする理由について誰かが提案を持っていますか?注:Javascriptが有効になっています。

  2. たぶん私のスクリプトは単純すぎるので、まったく同じ結果で次のことを試しました


4
この場合、Javascriptの使用を避けることをお勧めします。ただ、使用CSSは、CSSでテキストの選択に関する詳細な情報を見つけることができますこの質問に
RienNeVaPlu͢s

2番目のスクリプトはおそらく古すぎます。!document.allは、fxサポートに
違反

9
私はこれを行うサイトが嫌いです。テキストをコピーしたい場合は、開発ツールを開いて、とにかくコピーできます。これは不必要な不便です。
uylmz 2016年

4
まさにリークが言うように。非常に正当な理由がない限り、これを行わないでください。多くの人は、何かを選択して検索したり、辞書を使用して単語を検索したりするだけかもしれません。これを禁止することは、長期的には人々をあなたのサイトから遠ざけるかもしれない単なる迷惑です。
チェコ学2017年

1
まず、「楽しい」ためだけに選択(テキストなど)を禁止しているページも嫌いですが、無効にしたい正当な理由があるため(たとえば、マウスジェスチャーを実装するため)、良い質問だと思います。または、ゲーム内のテキストブロックのドラッグアンドドロップ)。もちろん、その終わりが悪い達成するためのJSを使用しますが、CSSのソリューションはまた、一部のブラウザでは、(その問題を持っているuser-selectだけではない仕事は、それは同様に、「-vendor-」プレフィックスを必要とします-moz-user-selectし、-webkit-user-selectそう、それを動作させるために、 、可能なすべてのバリエーションをnone)に設定する必要があります。
サイバーナイト2018年

回答:


209

このcssメソッドを使用するだけです。

body{
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

ここで同じ答えを見つけることができます:CSSを使用してテキスト選択の強調表示を無効にする方法は?


6
:また、あなたは、この答えを見つけ、そこからリンクを追加stackoverflow.com/questions/826782/...
Heijdenデルロンバン

どうもありがとうございました。本体のCSSは、IEを除くすべてのケースで機能しました。IEのこの問題も解決するための優れたCSSソリューションはありますか?私は今、すべてのブラウザをカバーするためにJsとCSSの組み合わせを使用しています!! thku。
アルペジオ

1.なぜこの回答が解決策としてタグ付けされていないのですか?...問題の問題を最も正確で簡単な方法で解決します。2.このCSS定義は、BODYだけでなく、任意のHTML要素に実装できることに注意してください。
TheCuBeMan 2016年

1
@TheCuBeManの「user-select」は非標準の機能であるため、IMOは最善の解決策ではありません。
ndugger 2016年

1
それはおそらく最良のアプローチです-それは複雑であり、それらはすべて異なるテイクを持っているので、ブラウザはそれを異なる方法で処理します。つまり、ユーザーが本当に必要かどうかを選択できるようにしながら、目的のUX(選択なし)を提供したいと考えています。W3Cドラフトにはより多くのメモがあり、caniuseは素晴らしいサポートを示しています。ブラウザが異なる方法で処理することは問題ありません。ユーザーは、好みのブラウザが提供するエクスペリエンスを得ることができます。
Shawn Erquhart 2017

24

ドラッグ機能を提供するためにスライダーUIコントロールを作成しています。これは、ユーザーがドラッグしているときにコンテンツが選択されないようにする方法です。

function disableSelect(event) {
    event.preventDefault();
}

function startDrag(event) {
    window.addEventListener('mouseup', onDragEnd);
    window.addEventListener('selectstart', disableSelect);
    // ... my other code
}

function onDragEnd() {
    window.removeEventListener('mouseup', onDragEnd);
    window.removeEventListener('selectstart', disableSelect);
    // ... my other code
}

startDragあなたのdomにバインドします:

<button onmousedown="startDrag">...</button>

すべての要素でテキスト選択を静的に無効にする場合は、要素が読み込まれたときにコードを実行します。

window.addEventListener('selectstart', function(e){ e.preventDefault(); });

      

2
CSSソリューションはcontenteditable属性を持つdivに対しては機能しないため、これが最善のソリューションです(たとえば、ユーザーのマウスによってコントロールのサイズが変更されているときにテキストの選択を無効にする場合など)。
mbomb007 2018年

12

JavaScriptの場合、次の関数を使用します。

function disableselect(e) {return false}
document.onselectstart = new Function (return false)
document.onmousedown = disableselect

選択を有効にするには、次を使用します。

function reEnable() {return true}

この関数はどこでも使用できます。

document.onclick = reEnable

ただしnew Function (return false)、有効なJavaScriptコードではありません。だけ使用してくださいdocument.onselectstart = disableselect
amik

@amikこれはどうですか:document.oncontextmenu = new Function("return false;");またはCSSを使用したこれ:<body onselectstart="return false">
Hassan Azimi

はいnew Function("return false;")は機能disableselectしますが、すでに持っているものを使用する場合に比べて不必要に複雑です。onselectstart="return false"動作しますが、CSSとは何の関係もありません。また、あなたの答えの残りの部分も間違っていることに気づきました-reEnable関数はまったく機能しません。
amik

@amik haha​​ JavaScriptには何も必要ありませんが、それでも実行します。確かに、コードはリファクタリングできますが、質問を見て、応答し、宿題をしようとしない質問に答えます。
Hassan Azimi

でも、SOは教育の場なので、技術的に間違っているだけでなく、まったく説明していない答えを提供するのは良い考えではないと思います。
amik

4

このようなhtmlページを取得した場合:

    <ボディ
    onbeforecopy = "return false"
    ondragstart = "return false" 
    onselectstart = "return false" 
    oncontextmenu = "return false" 
    onselect = "document.selection.empty()" 
    oncopy = "document.selection.empty()">

すべてのイベントを無効にする簡単な方法があります。

document.write(document.body.innerHTML)

あなたはhtmlコンテンツを手に入れ、他のものを失いました。


4

使用することもでき、すべてのブラウザで問題なく動作し、javascriptが必要です。

onselectstart = (e) => {e.preventDefault()}

例:

onselectstart = (e) => {
  e.preventDefault()
  console.log("nope!")
  }
Select me!


CSSのサポートをテストし、無効にするuserSelect、またはMozUserSelectFirefox用のもう1つのjsの代替手段。

let FF
if (CSS.supports("( -moz-user-select: none )")){FF = 1} else {FF = 0}
(FF===1) ? document.body.style.MozUserSelect="none" : document.body.style.userSelect="none"
Select me!


純粋なCSS、同じロジック。警告これらのルールをすべてのブラウザに拡張する必要があります。これは冗長になる可能性があります。

@supports (user-select:none) {
  div {
    user-select:none
  }
}

@supports (-moz-user-select:none) {
  div {
    -moz-user-select:none
  }
}
<div>Select me!</div>


0

シンプルこのテキストをコピーして前に置く </body>

function disableselect(e) {
  return false
}

function reEnable() {
  return true
}

document.onselectstart = new Function ("return false")

if (window.sidebar) {
  document.onmousedown = disableselect
  document.onclick = reEnable
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.