Как на JavaScript скопировать текст в буфер обмена кроссбраузерно?

Вопрос

Как можно скопировать какой-нибудь текст в буфер обмена, если это вообще возможно? Я попытался использовать эту функцию, которую нашёл в интернете:

function copyToClipboard(text)
{
if (window.clipboardData) // IE
{
window.clipboardData.setData("Text", text);
}
else
{
unsafeWindow.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const clipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
clipboardHelper.copyString(text);
}
}

Но Chrome, Explorer и Opera выдают ошибку, а Firefox показывает всплывающее окно с запросом разрешений на эту операцию, а в случае согласия таки копирует. Существует ли приемлемое решение этой задачи? Сомневаюсь конечно, но мало ли…

Ответ №1

Есть библиотека, которая работает, если установлен 10-й флеш плеер и выше. Конечно, я понимаю Ваше негодование: надоел этот никак не умирающий флеш и всё такое. Но выбирайте — либо так, либо никак. По крайней мере я решения пока не встречал.

Ответ №2

Автоматическое копирование в буфер обмена связано с дополнительными рисками, поэтому большинство нормальных браузеров блокируют эту возможность. Политика безопасности, понимаешь.
Лично я в такой ситуации использую следующий трюк:

function copyToClipboard (text) {
window.prompt ("Чтобы скопировать текст в буфер обмена, нажмите Ctrl+C и Enter", text);
}

Пользователь получает вопросительное окно, в котором весь текст для копирования уже выделен. Осталось только нажать Ctrl+C и Enter (чтобы закрыть окно). Эта операция полностью безопасна, поскольку пользователь производит копирование в буфер самостоятельно. И, конечно, метод работает во всех браузерах.

No responses yet

Добавить комментарий