копировать в буфер при помощи javascript

anton7805

Есть задача скопировать некий текст в буфер обмена на сайте.
Раньше и на старых браузерах можно было сделать это при помощи javascript без заморочек.
Но в появлением IE 7,8 и FF 3.5 в целях безопасности возможность доступа js к буферу обмена стала запрещена (по крайней мере без хаков в конфигах браузеров, но всем пользователям то не объяснишь этого).
Сейчас используется способ, описанный здесь
но он имеет существенные недостатки:

  • должен быть установлен флеш (хотя где его сейчас нет?! но тем не менее)
  • копирование данных происходит только по клику, причем до этого самого клика текст для буфера должен быть известен,так как сам клик обрабатывается уже флешом и добавить javascript'овский обработчик не получится

Но я никак не могу понять, как механизм копирования в буфер реализован в google spreadsheets.
Там можно произвольную область ячеек скопировать в буфер без всякого флеша, причем во всех последних версиях браузеров.
Как они обходят безопасность?

anton7805

Пока только минусы и ни одного ответа по теме.
Предупреждая гнобеж в стиле "говносайты не должны изменять буфер обмена"- скажу, что это не моя прихоть.
Все же интересно узнать как это у гугла реализовано.

Dasar

Там можно произвольную область ячеек скопировать в буфер без всякого флеша, причем во всех последних версиях браузеров.
Как они обходят безопасность?
gdocs не копирует сам ничего в буфер обмена, обмен делается своими средствами
почему ты решил, что он что-то копирует?

PooH

можешь организовать свой локальный буфер обмена

anton7805

gdocs не копирует сам ничего в буфер обмена, обмен делается своими средствами
Именно что копирует в буфер обмена. Гугловский веб-буфер не интересует.
Простой эксперимент: выделим произволную область ячеек в гугл спредшитс и из контектсного меню выберем пункт "Скопировать". Помимо копирования в веб-буффер гугла, контент копируется в буфер обмена операционки. Его можно вставить потом, например, в блокнот

Dasar

Простой эксперимент: выделим произволную область ячеек в гугл спредшитс и из контектсного меню выберем пункт "Скопировать".
так это может сам браузер и копирует.
например, пункт в меню Copy нифига в clipboard ничего не добавляет

Dasar

да, именно так они и делают
Online Spreadsheets hook Ctrl+C, Ctrl+V events and transfer focus to a hidden TextArea control and either set its contents to desired new clipboard contents for copy or read its contents after the event had finished for paste.

anton7805

Я правильно понимаю, что :
При выделении области ячеек фокус получает скрытый textarea
При возникновении событий Ctrl+C(V) браузер работает уже с textarea
?
Или сначала отлавливается событие, потом ставится фокус и потом это событие дальше проталкивается?

Dasar

Или сначала отлавливается событие, потом ставится фокус и потом это событие дальше проталкивается?
да, так.
ловится событие, в textarea вставляется нужный текст и выделяется, событие проталкивается дальше

anton7805

Спасибо, элегантное решение,попробую реализовать. Жаль только, что скопировать можно будет только по hot key

stm7884696

никто не мешает отлавливать нажатие правой кнопки мышки.

anton7805

И...?

Dasar

И...?
и через context menu тоже будет работать

anton7805

Там контекстное меню браузера не будет уместно, но идея та же.
Оставить комментарий
Имя или ник:
Комментарий: