Вставить текст из буфера обмена с помощью кнопки - PullRequest
5 голосов
/ 01 декабря 2009

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

Копирование / вырезание работает отлично. Вставьте, используя 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 событие.

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

Ответы [ 4 ]

2 голосов
/ 22 февраля 2010

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

1 голос
/ 02 декабря 2009

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

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

0 голосов
/ 05 июня 2013

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

0 голосов
/ 15 апреля 2010

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

...