Puis-je copier/coller mon brave ? 6


Dans 0bin on utilise encore flash pour faire le copier/coller, et je pense qu’on va le virer. Plus de raison de supporter les navigateurs trop vieux et après tout c’est pas grave de se voir refuser un raccourci pour copier/coller : le reste est utilisable.

Pourquoi je vous dis ça ?

Et bien parce que sebsauvage a partagé un snippet pour utiliser l’API du clipboard en JS. Et j’ai donc voulu savoir comment détecter que cette functionalité est implémentée par le navigateur en cours.

Je suis ainsi allé voir les sources de modernizr, et il implémente en fait une combinaisons de 2 techniques.

D’abord, vérifier si l’objet window a un attribut ClipboardEvent. Si oui, c’est réglé. Si non, il crée un div, on check s’il a un attribut paste. Le reste sont les hacks de compatibilité avec les très vieux navs que je ne vais pas retranscrire ici.

Donc en gros, avant de faire un copier/coller en JS, vérifiez:

function implementClipboardAPI(){
   try {
     return (!!window.ClipboardEvent || 'onpaste' in document.createElement('div'));
   } catch(e) {
     return false;
   }
}

6 thoughts on “Puis-je copier/coller mon brave ?

  • Brice

    Merci pour l’astuce.

    Par contre, je ne suis pas un fan ni un pro de JS, mais je suis intrigué par le !! de !!window.ClipboardEvent. Est-ce que c’est pour forcer une évaluation booléenne, mais sans inverser le résultat?

  • Roger

    @Brice

    le premier ‘!’ caste la propriété en booléen, ce qui renvoie un false dans le cas où la fonction existe, puis le deuxième ‘!’ flippe ce booléen pour renvoyer true dans le cas où la fonction existe.

  • Kmaschta

    Merci !

    Juste une petite typo s/navivateur/navigateur/

    @Brice C’est exactement ça, c’est équivalent à not not en python.

  • Sam Post author

    Disons plutot un hack pour obtenir le même effet que la fonction bool() en Python.

  • Knutknut

    s/functionalité/fonctionnalité

    s/mondernizer/modernizer

    s/si il a/s’il a

    s/. Et j’ai/. J’ai

    s/à/a

    s/créé/crée

    s/compatibilé/compatibilité

    s/, et/et

  • Joshuafr

    Sérieux Sam, j’adore ce site et te suis sur Twitter, mais si tu codes comme tu écris ça doit pas souvent fonctionner.

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.