Скопируйте в буфер обмена на Firefox и Google Chrome - PullRequest
4 голосов
/ 03 декабря 2010

, так как я осмотрелся и не смог найти никакого хорошего решения для копирования текста в Firefox или Chrome в буфер обмена.Тем не менее, я попробовал некоторые коды, предоставленные firefox на его сайте разработчика, но все еще не работал, и была одна ошибка с разрешением отказано.Вот код, который я пробовал в последнюю минуту.

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

У кого-нибудь есть хорошее решение, чтобы справиться с этим?Буду признателен за ваше участие.Спасибо.

Ответы [ 2 ]

4 голосов
/ 03 декабря 2010

Я так понимаю, это больше, чем просто просмотр?

Если нет, вы можете настроить параметр about: config в вашем браузере Firefox.Ищите «подписанный» в фильтре и установите для одиночного результата значение ОТКЛЮЧЕНО.

Однако, если вам нужен код для всего этого, это сложно, поскольку Firefox довольно хорошо защищен от этого.Один хитрый способ - использовать объект Flash для передачи строки, а затем использовать Flash для копирования в буфер обмена:)

1 голос
/ 05 июля 2012

Я нашел следующее решение:

При обработке ключа вниз создайте тег pre. Установите содержимое для копирования в этот тег. Сделайте выбор по этому тегу и верните true в обработчике. Это вызов стандартного обработчика хрома и скопированного выделенного текста.

И если вам нужно, вы можете установить таймаут для функции восстановления предыдущего выбора. Мои реализации на 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. :(');
        };
    }

использование:

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;

При вставке ее создайте текстовую область и работайте так же.

Извините за плохой английский - не мой родной язык.

...