5

我有控制栏按钮复制、剪切和粘贴,它们假设从剪贴板复制/粘贴一些文本/对象。

复制/剪切工作正常。使用 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

4 回答 4

2

为了克服 Flash Player 施加的这种安全限制,您可以使用 Flash 本地共享对象模拟系统剪贴板的功能,就像这里首先建议的那样http://joeberkovitz.com/blog/2008/12/12/clipboard-using-local -shared-objects/或通过 ExternalInterface 使用 Javascript API 从剪贴板中检索数据。

于 2010-02-22T10:26:18.097 回答
1

我唯一能找到的是使用自定义上下文菜单进行粘贴的能力。您可以在此处找到有关如何执行此操作的示例。我试过自己发送“粘贴”事件,玩家似乎以某种方式检测到粘贴来自上下文菜单或键盘 - 不完全确定它是如何做到的或为什么会这样。我希望其他人可以提供更多说明,但与此同时,上下文菜单会起作用吗?

更新:我认为没有任何方法可以强制粘贴事件。我一直在运行一些测试,似乎让这个事件调度并允许在没有安全错误的情况下调用 Clipboard.generalClipboard.setContents 方法的唯一方法是响应只能调度的全局粘贴事件“安全”来自上下文菜单或键盘事件(ctrl+V 或平台等效项)。抱歉。

于 2009-12-01T21:27:42.923 回答
0

在其他编程环境中,我发现从按钮触发剪贴板粘贴操作不起作用,因为按钮本身在粘贴操作发生之前获得焦点,远离目标编辑控件。会是这种情况吗?

于 2010-04-15T14:56:46.913 回答
-1

为了避免异常安全,事件的目标必须是应用程序的阶段对象。我没有在任何文档中找到此信息,这是根据我自己的经验。希望它有效。

于 2013-06-05T14:08:44.217 回答