2009-12-01 3 views
5

У меня есть кнопки панели управления «Копировать», «Вырезать» и «Вставить», и они предполагают скопировать/вставить некоторый текст/объекты из и в буфер обмена.Вставить текст из буфера обмена с помощью кнопки

Copy/Cut работает нормально. Вставка с использованием CTRL + V и контекстного меню прекрасно работает.

Но когда я пытаюсь получить доступ к буферу обмена с помощью управления кнопкой бара обработчик щелчка он выдает ошибку

SecurityError: Error #2179: The Clipboard.generalClipboard object may only be read while processing a flash.events.Event.PASTE event. 
at flash.desktop::Clipboard/getObjectReference() 
at flash.desktop::Clipboard/convertNativeFormat() 
at flash.desktop::Clipboard/getOriginal() 
at flash.desktop::Clipboard/getData() 
... 2 more 

Я знаю, что это проблема безопасности.

Метод Clipboard.generalClipboard.getData() может быть использован для чтения содержимого в системный буфер обмена, но только тогда, когда вызывается из обработчика событий обработки flash.events.Event. PASTE событие.

Но я должен реализовать панель управления пастой. Разве я это сделал?

ответ

1

Единственное, что мне удалось найти, - это возможность вставить с помощью настраиваемого контекстного меню. Вы можете найти example on how to do that here. Я пробовал отправлять «вставные» события сам, и плеер, похоже, как-то обнаружил, что паста происходит из контекстного меню или клавиатуры - не совсем уверен, как это происходит или почему это так. Надеюсь, что кто-то еще сможет дать больше разъяснений, но в среднем будет работать контекстное меню?

UPDATE: Я не думаю, что есть какой-либо способ принудительно вставить событие. Я выполнял некоторые тесты и, похоже, единственный способ отправить это событие для отправки и разрешить вызов метода Clipboard.generalClipboard.setContents без ошибки безопасности - это ответить на глобальное событие вставки, которое может быть отправлено только " безопасно "из контекстного меню или события клавиатуры (ctrl + V или эквивалент платформы). Извините.

2

Чтобы преодолеть это ограничение безопасности, наложенное Flash Player, вы можете либо имитировать функциональные возможности системного буфера обмена с объектами Flash Local shared, как это было сначала предложено здесь http://joeberkovitz.com/blog/2008/12/12/clipboard-using-local-shared-objects/, либо использовать Javascript API через ExternalInterface для извлечения данных из буфера обмена.

0

В другой среде программирования я обнаружил, что запуск действия вставки в буфер обмена с помощью кнопки не работает, потому что сама кнопка получает фокус, удаленный от целевого элемента управления редактированием, прежде чем произойдет действие пасты. Может ли это быть в этом случае?

-1

Во избежание защиты от исключения цель события ДОЛЖНА быть объектом этапа приложения. Я не нашел эту информацию в какой-либо документации, это из моего собственного опыта. Надеюсь, что это работает.

+0

Кажется, вы либо неправильно задали вопрос, либо обнаружили отверстие безопасности в Flash Player. Не могли бы вы привести пример кода? –