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; } } |
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?
@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.
Merci !
Juste une petite typo s/navivateur/navigateur/
@Brice C’est exactement ça, c’est équivalent à
not not
en python.Disons plutot un hack pour obtenir le même effet que la fonction bool() en Python.
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
Sérieux Sam, j’adore ce site et te suis sur Twitter, mais si tu codes comme tu écris ça doit pas souvent fonctionner.