97 votes

javascript : Désactiver la sélection de texte

J'utilise le javascript pour désactiver la sélection de texte sur mon site web.

Le code est :

<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>

On peut trouver des script similaires ici

Sur mon serveur local : Tous les navigateurs (Firefox, Chrome, IE et Safari) fonctionnent parfaitement.

Sur mon site Live : Tout va bien, sauf Firefox.

Mes questions sont les suivantes :

  1. Quelqu'un a-t-il une idée de la raison pour laquelle Firefox se comporte différemment pour le site en direct et l'hôte local ? Note : Javascript est activé.

  2. Peut-être que mon script est trop simpliste alors j'ai essayé le suivant avec EXACTEMENT les mêmes résultats

235voto

Zachrip Points 3091

Il suffit d'utiliser cette méthode 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;
}

Vous pouvez trouver la même réponse ici : Comment désactiver la mise en évidence de la sélection de texte à l'aide de CSS ?

32voto

YiFeng Points 337

Je suis en train d'écrire un contrôle d'interface utilisateur de curseur pour fournir la fonction de glisser, c'est ma façon d'empêcher le contenu de sélectionner lorsque l'utilisateur fait glisser :

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
}

lier startDrag sur votre dom :

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

Si vous voulez désactiver statiquement la sélection de texte sur tous les éléments, exécutez le code lorsque les éléments sont chargés :

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

11voto

Hassan Azimi Points 4494

Pour JavaScript, utilisez cette fonction :

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

pour activer la sélection, utilisez ceci :

function reEnable() {return true}

et utiliser cette fonction où vous voulez :

document.onclick = reEnable

6voto

bootsoon Points 448

Si vous avez une page html comme celle-ci :

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

Il existe un moyen simple de désactiver tous les événements :

document.write(document.body.innerHTML)

Vous avez obtenu le contenu html et perdu d'autres choses.

5voto

Cryptopat Points 119

On peut aussi utiliser, fonctionne bien dans tous les navigateurs, nécessite du javascript :

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

Exemple :

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

Select me!

Une autre alternative js, en testant les supports CSS, et en désactivant userSelect ou MozUserSelect pour Firefox.

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!

Pure css, même logique. Attention vous devrez étendre ces règles à chaque navigateur, cela peut être verbeux.

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

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

<div>Select me!</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X