среда, 3 декабря 2008 г.

Flash Player 10 – теперь Clipboard требует взаимодействия с пользователем

В web-приложениях часто приходится иметь дело с копированием какого-то string-значения в системный буфер обмена. Это становится реальной проблемой, когда нужна кроссбраузерность. Из JavaScript-а работать с буфером обмена можно, но это позволяет лишь Internet Explorer и Firefox, но с некоторыми ограничениями.

Нашёл для себя выход – использовать Flash-объект (вроде, copyToClipboard.swf назывался), встроенный на страницу. На элемент HTML-страницы вешается событие, JavaScript-ом передаётся нужный параметр во Flash-объект, а уже тот в свою очередь имеет доступ к буферу обмена пользователя. Таким образом, можно было положить любую строку из браузера пользователя в буфер обмена операционной системы.

Недавно мой Flash Player 9 нашёл в сети новую версию и предложил обновиться на 10-ю версию, на что я дал утвердительный ответ. Скачал, обновился, проверил flash объекты, все работают, всё функционирует так же, ... но потом обнаружилось, что в буфер обмена не попадает заветная строка.

На сайте adobe нашёл информацию о новом релизе, и начал разбираться, в чём дело. Оказалось, что изменений было много, и самые важные коснулись безопасности нового Flash Player-а, в числе которых и были ограничения на работу с clipboard. В девятой версии плеера ActionScript мог устанавливать значение в системный буфер обмена в любое время. В Flash Player 10 метод System.setClipboard() может быть успешно вызван только через ActionScript вызванный именно взаимодействием пользователя. Это могут быть, как события вызванные мышью, так и события исходящие от клавиатуры. Это нововведение с взаимодействием пользователя так же касается и нового ActionScript 3.0 метода Clipboard.generalClipboard.setData() и метода Clipboard.generalClipboard.setDataHandler().

Таким образом, эти изменения в основном затрагивают все SWF-файлы, которые используют System.setClipboard() метод. Нововведения касаются всех SWF-фалов проигрываемых в версиях Flash Player 10 и старше.

Подведу итог. Если вы хотите, чтобы ваши web-приложения работали адекватно с буфером обмена и в новых версиях Flash Player, то не забудьте обновить логику работы с System.setClipboard(). Этот метод теперь нужно вызывать непосредственно действием пользователя, к примеру, через кнопку, клавишную комбинацию быстрого вызова, или мышь.

Комментариев нет:

Отправить комментарий

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting