Вставить текст из буфера обмена с помощью кнопки
У меня есть кнопки панели управления "Копировать", "Вырезать" и "Вставить", и они предполагают скопировать / вставить текст или объекты из буфера обмена и в него.
Копировать / вырезать работает отлично. Вставьте, используя 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 ответа
Чтобы преодолеть это ограничение безопасности, наложенное Flash Player, вы можете имитировать функциональность системного буфера обмена с общими локальными объектами Flash, как это было впервые предложено здесь http://joeberkovitz.com/blog/2008/12/12/clipboard-using-local-shared-objects/ или использовать API Javascript через ExternalInterface для извлечения данных из буфера обмена.
Единственное, что мне удалось найти, - это возможность вставки с помощью пользовательского контекстного меню. Вы можете найти пример того, как это сделать, здесь. Я сам пытался отправить события "вставки", и проигрыватель, похоже, каким-то образом обнаружил, что вставка происходит из контекстного меню или клавиатуры - не совсем уверен, как это происходит или почему это происходит. Я надеюсь, что кто-то еще может дать больше разъяснений, но в то же время сработает ли контекстное меню?
ОБНОВЛЕНИЕ: я не думаю, что есть какой-либо способ форсировать событие вставки. Я провел несколько тестов, и кажется, что единственный способ заставить это событие отправлять и позволять вызывать метод Clipboard.generalClipboard.setContents без ошибки безопасности, это отвечать на глобальное событие вставки, которое может быть отправлено только " безопасно "из контекстного меню или события клавиатуры (Ctrl+V или эквивалент платформы). Извините.
В другой среде программирования я обнаружил, что запуск действия вставки в буфер обмена с помощью кнопки не работает, поскольку кнопка сама получает фокус, вне целевого элемента редактирования, до того, как произойдет действие вставки. Может ли это быть так?
Чтобы избежать безопасности исключений, цель события ДОЛЖНА БЫТЬ объектом сцены приложения. Я не нашел эту информацию в какой-либо документации, это из моего собственного опыта. Надеюсь, что это работает.