Copy to clipboard on firefox and google chrome

since I have looked around and could not find any nice solution for copying text on firefox or chrome to clipboard. However, I have tried some codes provide by firefox in its developer site, but still not work and there was one errror with permission denied. Here is the code I tried the last minute.

var copytext = "Text to copy";  
var str      = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);  
str.data     = copytext; 

Does anyone have a good solution to deal with this? I would appreciate for your sharing. Thanks.

Answers


I am found next solution:

On key down handler create "pre" tag. Set content to copy to this tag. Make Selection on this tag and return true in handler. This call standard handler of chrome and copied selected text.

And if u need u may be set timeout for function for restoring previous selection. My implementantions on Mootools:

   function EnybyClipboard() {
        this.saveSelection = false;
        this.callback = false;
        this.pastedText = false;

        this.restoreSelection = function () {
            if (this.saveSelection) {
                window.getSelection().removeAllRanges();        
                for (var i = 0; i < this.saveSelection.length; i++) {
                    window.getSelection().addRange(this.saveSelection[i]);
                }
                this.saveSelection = false;
            }
        };

        this.copyText = function (text) {
            var div = $('special_copy');
            if (!div) {
                div = new Element('pre', {'id' : 'special_copy', 'style': 'opacity: 0;position: absolute;top: -10000px;right: 0;'});
                div.injectInside(document.body);
            }
            div.set('text', text);
            if (document.createRange) {
                var rng = document.createRange();
                rng.selectNodeContents(div);
                this.saveSelection = [];
                var selection = window.getSelection();
                for (var i = 0; i < selection.rangeCount; i++) {
                    this.saveSelection[i] = selection.getRangeAt(i);
                }
                window.getSelection().removeAllRanges();
                window.getSelection().addRange(rng);
                setTimeout(this.restoreSelection.bind(this), 100);
            } else
                return alert('Copy not work. :(');
        };

        this.getPastedText = function () {
            if (!this.pastedText) 
                alert('Nothing to paste. :(');
            return this.pastedText;
        };

        this.pasteText = function (callback) {
            var div = $('special_paste');
            if (!div) {
                div = new Element('textarea', {'id' : 'special_paste', 'style': 'opacity: 0;position: absolute;top: -10000px;right: 0;'});
                div.injectInside(document.body);
                div.addEvent('keyup', function() {
                    if (this.callback) {
                        this.pastedText = $('special_paste').get('value');
                        this.callback.call(this.pastedText);
                        this.callback = false;
                        this.pastedText = false;
                        setTimeout(this.restoreSelection.bind(this), 100);
                    }
                }.bind(this));
            }
            div.set('value', '');
            if (document.createRange) {
                var rng = document.createRange();
                rng.selectNodeContents(div);
                this.saveSelection = [];
                var selection = window.getSelection();
                for (var i = 0; i < selection.rangeCount; i++) {
                    this.saveSelection[i] = selection.getRangeAt(i);
                }
                window.getSelection().removeAllRanges();
                window.getSelection().addRange(rng);
                div.focus();
                this.callback = callback;
            } else
                return alert('Fail to paste. :(');
        };
    }

usage:

enyby_clip = new EnybyClipboard(); //init 

enyby_clip.copyText('some_text'); // place this in CTRL+C handler and return true;

enyby_clip.pasteText(function callback(pasted_text) {
        alert(pasted_text);
}); // place this in CTRL+V handler and return true;

On paste its create textarea and work same.

Sorry for bad English - not my native language.


I take it it's for more than just you viewing?

If not, you can adjust the setting in about:config in your Firefox browser. Look for 'signed' in the filter, and set the single result to DISABLED.

However, if you want code for the whole thing, it's tricker as Firefox is quite well secured against that. One tricky way is to use a Flash object to pass the string to, and then use Flash to copy to the clipboard :)


Need Your Help

ActiveRecord 4 how to user :order and :include

activerecord ruby-on-rails-4

I've just upgraded to Ruby 2.0 which by default will load ActiveRecord 4 for a Padrino app. This is fine, I'd like to take advantage of the Ruby 2.0 and AR 4 improvements. However, I'm having trouble

Facebook authentication token on multiple devices

ios iphone facebook-access-token

I am integrating the facebook SDK in my application for ios. When the user login via facebook I am getting the token, and using it to authenticate the user in my app. The token will also be used to...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.