web-dev-qa-db-fra.com

Est-il possible de lire le presse-papiers dans Firefox, Safari et Chrome en utilisant Javascript?

J'essaie de lire le contenu du presse-papiers en utilisant Javascript. Avec Internet Explorer, il est possible d'utiliser la fonction

window.clipboardData.getData("Text")

Existe-t-il une manière similaire de lire le presse-papiers dans Firefox, Safari et Chrome?

30
Gil Faria

Safari prend en charge la lecture du presse-papiers lors des événements onpaste:

Information

Vous voulez faire quelque chose comme:

someDomNode.onpaste = function(e) {
    var paste = e.clipboardData && e.clipboardData.getData ?
        e.clipboardData.getData('text/plain') :                // Standard
        window.clipboardData && window.clipboardData.getData ?
        window.clipboardData.getData('Text') :                 // MS
        false;
    if(paste) {
        // ...
    }
};
16
eyelidlessness

Les feuilles de calcul en ligne accrochent les événements Ctrl + C, Ctrl + V, transfèrent le focus sur un contrôle TextArea masqué et le définissent comme contenu du nouveau presse-papiers souhaité pour la copie ou lisent son contenu une fois l'événement terminé pour le collage.

14
agsamek

NO. Et si vous trouvez un hack (par exemple, une ancienne version de flash), n'en dépendez pas.

Puis-je vous demander pourquoi vous voulez lire dans le presse-papier? Si l'utilisateur souhaite transmettre le contenu du presse-papiers, il lui suffit de coller.

2
scunliffe

Je crois que les gens utilisent un élément Flash caché pour lire les données du presse-papiers à partir des navigateurs que vous avez mentionnés.

1
Nick Berardi

À l’aide de la suggestion de @agsamek, j’ai créé un petit test coupé et je l’ai fait fonctionner. Dans mon cas, je dois attendre après un nouveau chargement de page pour une entrée collée. Je me concentre donc sur une zone de texte non visible et lis le texte à partir de là.

Vous pouvez étendre cela à l'écoute de touches spécifiques (combinaison de collage), puis vous concentrer sur le champ caché. Il y aurait certainement plus de travail à faire, car je pense que vous devez vous reconcentrer sur le dernier élément ciblé et coller le contenu à cet endroit.

Pour mon cas d'utilisation, cela suffisait toutefois à le faire fonctionner dans les derniers Chrome et Firefox. Suggestions bienvenues.

https://jsfiddle.net/wuestkamp/91dxjv7s/11/

$(function () {

    $('body').prepend('<input type="text" id="hidden_textbox" style="position: absolute; width:0px; height: 0px; top: -100px; left: -100px">');

    var $hiddenTextbox = $('#hidden_textbox');
    $hiddenTextbox.focus();

    $(document).on('paste', function () {
        setTimeout(function () {
            var val = $hiddenTextbox.val();

            console.log('pasted: ' + val);

        }, 50);

    });

});
0
Kim