How to copy to clipboard with GWT?

后端 未结 6 1981
面向向阳花
面向向阳花 2020-12-17 14:56

Couldn\'t find anything on this with a Google Search.

Does anyone know how to copy some text to the clipboard through GWT Java code? I\'d like to avoid the raw javas

6条回答
  •  时光说笑
    2020-12-17 15:15

    Just wrap the provided answer https://stackoverflow.com/a/30810322/106261.

    So, you pass in any text to a javascript native function/method, the js function creates a new element and copies to clipboard, and removes the element after copying.

    No need for any libs with new browsers.

    so :

    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);
        }-*/;
    

提交回复
热议问题