Comment copier au bloc-notes avec GWT?

Je n'ai rien trouvé avec une recherche sur Google.

quelqu'un sait-il copier du texte dans le presse-papiers à l'aide du code Java de GWT? J'aimerais éviter la solution d'injection javascript brute.

toute aide ou pointeur apprécié.

15
demandé sur Will 2009-08-23 01:07:14

6 réponses

pour le moment il ne semble pas qu'il y ait des bibliothèques GWT qui fournissent cette fonctionnalité. Dans tous les cas, il est impossible de le prendre en charge dans tous les navigateurs car Flash est nécessaire. Une bibliothèque plutôt agréable que wraps la fonctionnalité est ZeroClipboard.

3
répondu Alexander Kellett 2009-09-23 17:52:08

j'ai utilisé ZeroClipboard avec GWT (comme suggéré par Alexander) mais ce n'était pas simple.

voir http://blog.dandoy.org/2011/09/using-zeroclipboard-with-gwt.html

5
répondu Cedric 2011-09-09 16:59:02

voici le code a bien fonctionné pour moi dans chrome:

public static native void copyToClipboard() /*-{
    var selection = $wnd.getSelection();
    var text =  $doc.getElementById("myElement");
    var range = $doc.createRange();
    range.selectNodeContents(text);
    selection.removeAllRanges();
    selection.addRange(range);
    $doc.execCommand('copy');
    selection.removeAllRanges();
}-*/;
5
répondu sushmitha shenoy 2015-09-09 13:04:26

GWT ne supporte pas nativement le $doc.execCommand('copy'); la commande, mais c'est super facile.

d'Abord mettre l'accent sur l'élément, sélectionnez le texte, puis de le copier.

myTextBox.setFocus(true);
myTextBox.selectAll();
boolean success = copyToClipboard();

private static native boolean copyToClipboard() /*-{
    return $doc.execCommand('copy');
}-*/;
2
répondu Craigo 2016-12-23 07:04:46
gwt élémentaire au lieu de cela, toujours inspiré par @SushmithaShenoy, laissant ceci ici pour référence future.

condition préalable:

import elemental.client.Browser;
import elemental.html.Selection;
import elemental.ranges.Range;

Label.getElement().setAttribute("id","your_element_id"); //unique ID!

maintenant, le "vrai" code, peut-être placé dans un clickhandler:

final Selection selection = Browser.getWindow().getSelection();
final Range range = Browser.getDocument().createRange();
range.selectNodeContents(Browser.getDocument().getElementById(""you_elements_id"));
selection.removeAllRanges();
selection.addRange(range);
Browser.getWindow().getDocument().execCommand("copy", false, "");
selection.removeAllRanges();
1
répondu ArcTanH 2016-11-16 11:15:17

juste envelopper la réponse fournie https://stackoverflow.com/a/30810322/106261.

ainsi, vous passez dans n'importe quel texte à une fonction/méthode native javascript, la fonction JS crée un nouvel élément et copie au presse-papiers, et supprime l'élément après copie.

Pas besoin de libs avec les nouveaux navigateurs.

donc :

public static native void copyTextToClipboard(String text) /*-{
        var textArea = document.createElement("textarea");
        //
        // *** This styling is an extra step which is likely not required. ***
        //
        // Why is it here? To ensure:
        // 1. the element is able to have focus and selection.
        // 2. if element was to flash render it has minimal visual impact.
        // 3. less flakyness with selection and copying which **might** occur if
        //    the textarea element is not visible.
        //
        // The likelihood is the element won't even render, not even a flash,
        // so some of these are just precautions. However in IE the element
        // is visible whilst the popup box asking the user for permission for
        // the web page to copy to the clipboard.
        //

        // Place in top-left corner of screen regardless of scroll position.
        textArea.style.position = 'fixed';
        textArea.style.top = 0;
        textArea.style.left = 0;

        // Ensure it has a small width and height. Setting to 1px / 1em
        // doesn't work as this gives a negative w/h on some browsers.
        textArea.style.width = '2em';
        textArea.style.height = '2em';

        // We don't need padding, reducing the size if it does flash render.
        textArea.style.padding = 0;

        // Clean up any borders.
        textArea.style.border = 'none';
        textArea.style.outline = 'none';
        textArea.style.boxShadow = 'none';

        // Avoid flash of white box if rendered for any reason.
        textArea.style.background = 'transparent';


        textArea.value = text;

        document.body.appendChild(textArea);

        textArea.select();

        try {
            var successful = document.execCommand('copy');
        } catch (err) {
            console.log('Unable to copy');
        }
        document.body.removeChild(textArea);
    }-*/;
0
répondu NimChimpsky 2017-06-07 04:29:59